大家好,我是秦培。欢迎关注我的博客,我的博客地址blog.csdn.net/qinyuanpei。

不知从什么时候開始,国产RPG单机游戏開始出现换装,仙剑系列中第一部实现了换装的游戏是仙剑奇侠传四,后来原上海软星团队。眼下的烛龙科技更是在/《古剑奇谭》中将换装发挥到了极致。

我们来看几组图片吧:

换装从某种意义上来说就是改变角色的外观。尽管没有什么特别有用的功能,但从视觉上能够打破以往PRG游戏一套行头走天下的尴尬局面,所以换装还是非常不错的。那么从技术上来讲,换装主要分为两类:

一、添加式换装

所谓添加式换装,就是指角色模型的身体是一个完整的网格。须要更换的部分仅仅是一个可拆卸的部件。因而换装实际上就是在特定的部位添加或者移除一个模型。这类换装通经常使用在角色的武器更换中,仙剑、古剑的武侠更换都是这样的类型,如图所看到的的鱼骨头仅仅是在手这个位置更换模型:

二、更新式换装

更新式换装是指角色拥有一个公共的骨骼网络和针对该模型的若干组贴图。

那么,此时的换装实际上就是将贴图贴到相应的位置实现角色外观的改变,仙剑四严格来讲应该不算是换装,它实际上是做了两套模型(琼华装/野人装)。

古剑奇谭的换装实际上就是这样的类型的换装。这里我们以以下的一个样例,来一起学习怎样实现这样的类型的换装。

首先我们创建一个Unity项目:

首先我们去下载官方提供的换装的样例,我们这里仅仅须要里面的模型。由于这个模型提供了多组贴图能够供我们使用。我们将模型拖拽到场景中,我们展开模型能够发现模型是有若干个部分组成的,每个模型都有一个SkinnedMeshRenderer组件,改变该组件的材质,我们就能够实现对特定部位的换装。由此。我们写出了以下的代码:

using UnityEngine;
using System.Collections;public class ChangeSkin : MonoBehaviour {//眼睛贴图public Texture2D[] TextureEyes;//面部贴图-前public Texture2D[] TextureFace1;//面部贴图-后public Texture2D[] TextureFace2;//头发贴图-前public Texture2D[] TextureHair1;//头发贴图-后public Texture2D[] TextureHair2;//下衣贴图-前public Texture2D[] TexturePants1;//下衣贴图-后public Texture2D[] TexturePants2;//上衣贴图-前public Texture2D[] TextureTop1;//上衣贴图-后public Texture2D[] TextureTop2;//鞋子贴图-前public Texture2D[] TextureShoes1;//鞋子贴图-后public Texture2D[] TextureShoes2;//与贴图相应的SkinnedMeshRendererSkinnedMeshRenderer MeshEyes;SkinnedMeshRenderer MeshFace1;SkinnedMeshRenderer MeshFace2;SkinnedMeshRenderer MeshHair1;SkinnedMeshRenderer MeshHair2;SkinnedMeshRenderer MeshPants1;SkinnedMeshRenderer MeshPants2;SkinnedMeshRenderer MeshTop1;SkinnedMeshRenderer MeshTop2;SkinnedMeshRenderer MeshShoes1;SkinnedMeshRenderer MeshShoes2;void Start () {//获取SkinnedMeshRendererMeshEyes=transform.Find("eyes").GetComponent<SkinnedMeshRenderer>();MeshFace1=transform.Find("face-1").GetComponent<SkinnedMeshRenderer>();MeshFace2=transform.Find("face-2").GetComponent<SkinnedMeshRenderer>();MeshHair1=transform.Find("hair-1").GetComponent<SkinnedMeshRenderer>();MeshHair2=transform.Find("hair-2").GetComponent<SkinnedMeshRenderer>();MeshPants1=transform.Find("pants-1").GetComponent<SkinnedMeshRenderer>();MeshPants2=transform.Find("pants-2").GetComponent<SkinnedMeshRenderer>();MeshTop1=transform.Find("top-1").GetComponent<SkinnedMeshRenderer>();MeshTop2=transform.Find("top-2").GetComponent<SkinnedMeshRenderer>();MeshShoes1=transform.Find("shoes-1").GetComponent<SkinnedMeshRenderer>();MeshShoes2=transform.Find("shoes-2").GetComponent<SkinnedMeshRenderer>();}void OnGUI(){if(GUILayout.Button("显示外装1",GUILayout.Height(30))){SetSkin(MeshEyes,TextureEyes[0]);SetSkin(MeshFace1,TextureFace1[0]);SetSkin(MeshFace2,TextureFace2[0]);SetSkin(MeshHair1,TextureHair1[0]);SetSkin(MeshHair2,TextureHair2[0]);SetSkin(MeshPants1,TexturePants1[0]);SetSkin(MeshPants2,TexturePants1[0]);SetSkin(MeshTop1,TextureTop1[0]);SetSkin(MeshTop2,TextureTop2[0]);SetSkin(MeshShoes1,TextureShoes1[0]);SetSkin(MeshShoes2,TextureShoes2[0]);}if(GUILayout.Button("显示外装2",GUILayout.Height(30))){SetSkin(MeshEyes,TextureEyes[1]);SetSkin(MeshFace1,TextureFace1[1]);SetSkin(MeshFace2,TextureFace2[1]);SetSkin(MeshHair1,TextureHair1[1]);SetSkin(MeshHair2,TextureHair2[1]);SetSkin(MeshPants1,TexturePants1[1]);SetSkin(MeshPants2,TexturePants1[1]);SetSkin(MeshTop1,TextureTop1[1]);SetSkin(MeshTop2,TextureTop2[1]);SetSkin(MeshShoes1,TextureShoes1[1]);SetSkin(MeshShoes2,TextureShoes2[1]);   }}private void SetSkin(SkinnedMeshRenderer mRenderer,Texture2D mTexture){mRenderer.material.mainTexture=mTexture;}}

这里我们提供两套外装。

我们把脚本拖放到模型上。然后编辑贴图数组:

编辑好贴图后。我们就能够执行程序了,注意贴图要和模型网格匹配。

执行效果:

这样的方法须要设计者全然的了解角色身体的内部构造。所以须要和美工有良好的合作才干够实现,感觉效果还是不错的啊,哈哈

好了。这就是今天的博客了,希望对大家实用、希望大家喜欢!

每日箴言:人的思想是了不起的,仅仅要专注于某一项事业。就一定会做出使自己感到惊讶的成绩来。——马克·吐温

喜欢我的博客请记住我的名字:秦元培。我的博客地址是:blog.csdn.net/qinyuanpei

转载请注明出处,本文作者:秦元培,本文出处:http://blog.csdn.net/qinyuanpei/article/details/24393683

版权声明:本文博客原创文章,博客,未经同意,不得转载。转载请注明作者和出处,谢谢!

转载于:https://www.cnblogs.com/mengfanrong/p/4752192.html

[Unity3D]Unity3D连衣裙实现游戏开发系统相关推荐

  1. 从零开始丨使用Unity3D进行VIVE VR游戏开发

    从零开始丨使用Unity3D进行VIVE VR游戏开发 SteamVR插件的导入 使用Unity3D进行VR游戏的开发,首先需要具备以下条件 1 拥有一台显卡不低于GTX960性能的主机 2 拥有一部 ...

  2. 基于Unity3D的AR小游戏开发【100011412】

    本科毕业设计(论文) GRADUATION DESIGN(THESIS) 基于 Unity3D 的增强现实游戏程序 摘要 增强现实(AR)作为一项新兴技术近年来被越来越多的人群所获知,AR 也渐渐走进 ...

  3. Android游戏开发系统控件-CheckBox

    Android游戏开发系统控件-CheckBox 2012/5/11 星期五 CheckBox是Android系统最普通的UI控件,继承了Button按钮 下面通过一个实例来学习 作者:wwj 功能: ...

  4. Android游戏开发系统控件-Dialog

    Android游戏开发系统控件-Dialog Dialog(对话框)在Android应用开发中经常用到,下面是学习<Android游戏编程从零开始>一书,关于Dialog的初步学习. 创建 ...

  5. Unity3D——学习分享(一) 游戏开发

    自学游戏开发也有一段时间了,很早就想把自己所学到的知识做个笔记总结一下,但因为种种的原因一直没能坚持下来,所以现在我打算现在开始把我学到的内容总结下来,主要的目的是: 把自己的所学所感记录下来,方便自 ...

  6. Unity-3D捕鱼达人小游戏开发 —— 起因和开始的设置以及准备工作

    起因 假期里的软件实践课,使用Unity-3D写一个游戏,试想也不能太low,但是奈何素材和资源太难找,在论坛上逛到了捕鱼达人的素材,便来试一试 开始 素材毕竟是从网上扒的,我觉得也不好放出来,存在网 ...

  7. 【Unity3D入门教程】游戏开发利器UGUI的基本使用方法

    前言 UGUI是Unity官方推出的新一代交互系统,与传统的GUI相比,它具有使用灵活.界面美观.支持个性化定制的特点.本文将会进行UGUI使用的简单介绍,与大家一起敲开UGUI开发的大门. 说到底, ...

  8. Delphi程序员的“Unity3D”:开源跨平台游戏开发引擎Castle Game Engine(CGE)

    官方网站:https://castle-engine.io/features.php Delphi牛人开发的3D/2D开源游戏引擎支持: 跨平台(Linux,Windows,Mac OS X,Free ...

  9. 基于unity3D的趣味桌球游戏开发

    设计主题 游戏中的主场景是一个四面有墙的场景,桌面上放置有可以滚动的小球和多个小方块,游戏开始后,玩家通过键盘控制球去吃方块,游戏得分会随着方块的减少而增长,当小球吃完全部的方块,得分达到最高,此时游 ...

最新文章

  1. Android 设置thumb图片大小
  2. 99%网工都会遇到的10道经典面试问题
  3. 医院计算机操作权限管理制度,附五医院网络工作站管理制度
  4. jquery简洁遮罩插件
  5. 强制升级?!.NET Core 2.1容器镜像将从Docker Hub中删除
  6. react学习(15)---antdesign form两种验证
  7. nyoj 471:好多的树(容斥原理)
  8. 关于Object数组强转成Integer数组的问题:Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;...
  9. Serializable中的serialVersionUID
  10. 20190825:(leetcode习题)最长公共前缀
  11. python基础教程-Python基础
  12. Echarts数据可视化series-heatmap热力图,开发全解+完美注释
  13. leetCode 203. Remove Linked List Elements 链表
  14. OpenWRT设置SmartDNS+ADGuardHome+小喵咪
  15. vue 删除页面缓存_VUE清除keepalive页面缓存
  16. linux uefi iso,支持UEFI启动的GRUB2 ISO光盘镜像的制作
  17. java段子_Java程序员的内涵段子
  18. 定时打开指定程序软件
  19. 计算机毕业设计(附源码)python语言学习系统
  20. 王姨劝我学HarmonyOS鸿蒙2.0系列教程之五布局方法点击响应!

热门文章

  1. 西班牙放大招,利用区块链技术防腐
  2. 构建node.js基础镜像_我如何使用Node.js构建工作抓取网络应用
  3. PyInstaller库的使用
  4. vba保存文件为xlsx格式_Vba把Excel某个范围保存为XLS工作薄文件
  5. 零基础ui设计培训一定要知道字体设计规则
  6. UI设计培训分享:平面广告设计中的文案表达技巧
  7. Python培训:try-except语句与else子句联合使用处理可能出现的程序异常
  8. matlab svr 预测,SVR 多目标预测
  9. mysql可以做日期处理吗_mysql可以做日期处理吗
  10. 查看JDK的历史版本