换装有两种:增加式换装、更新式换装

一、增加式换装

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

二、更新式换装

更新式换装是指角色拥有一个公共的骨骼网络和针对该模型的若干组贴图。那么,此时的换装实际上就是将贴图贴到对应的位置实现角色外观的改变,仙剑四严格来讲应该不算是换装,它实际上是做了两套模型(琼华装/野人装)。古剑奇谭的换装实际上就是这种类型的换装,这里我们以下面的一个例子,来一起学习如何实现这种类型的换装。首先我们创建一个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;//与贴图对应的SkinnedMeshRenderer
    SkinnedMeshRenderer 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;}}

这里我们提供两套外装。我们把脚本拖放到模型上,然后编辑贴图数组:

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

这种方法需要设计者完全的了解角色身体的内部构造,所以需要和美工有良好的合作才可以实现。

本文出处:http://blog.csdn.net/qinyuanpei/article/details/24393683

转载于:https://www.cnblogs.com/UnrealEra/p/5861581.html

Unity3D游戏开发之换装系统的实现相关推荐

  1. [Unity3D]Unity3D游戏开发之换装系统的实现

    大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei. 不知从什么时候开始,国产RPG单机游戏开始出现换装,仙剑系列中第一部实现了换装的游戏是仙剑奇 ...

  2. android+Unity3D游戏开发之简单的物体运动

    android+Unity3D游戏开发之简单的物体运动 其实这篇也是转载的,真的感觉对于我们初学者来说很不错的,不信你看看嘛;原创链接:http://bbs.9ria.com/thread-98192 ...

  3. 从一点儿不会开始——Unity3D游戏开发学习(一)

    一些废话 我是一个windows phone.windows 8的忠实粉丝,也是一个开发者,开发数个windows phone应用和两个windows 8应用.对开发游戏一直抱有强烈兴趣和愿望,但奈何 ...

  4. Unity3D游戏开发之自由视角下的角色控制

    秦元培的博客:http://blog.csdn.net/qinyuanpei/article/details/39125353 1,[Unity3D]Unity3D游戏开发之角色控制漫谈 2,[Uni ...

  5. Unity3D游戏开发之仿仙剑奇侠传一2D游戏 (一)

    今天要和大家分享的是基于Unity3D开发2D游戏,博主一直钟爱于国产武侠RPG,这个我在开始写Unity3D游戏开发系列文章的时候就已经说过了,所以我们今天要做的就是利用Unity3D来实现在2D游 ...

  6. Unity3D游戏开发之邂逅Unity3D

    从今天起,博主决定要在毕业前把大学里想学的东西都学完.所以,从今天起,大家将看到由我为大家带来的Unity3D系列文章,让我们一起来学习Unity3D游戏开发吧! 在正式今天的文章之前,博主想简单介绍 ...

  7. Unity3D游戏开发介绍

    Unity3D游戏开发介绍 Unity3D Unity是实时3D互动内容创作和运营平台.包括游戏开发.美术.建筑.汽车设计.影视在内的所有创作者,借助Unity将创意变成现实. Unity平台提供一整 ...

  8. [Unity3D]Unity3D游戏开发之鼠标旋转、缩放实现3D物品展示

    各位朋友,大家好,我是秦元培,欢迎大家关注我的博主,我的博客地址是blog.csdn.net/qinyuanpei.最近博主重点研究了摄像机旋转.缩放等问题,那么今天为大家分享的是一个在3D展示中比较 ...

  9. Unity3D游戏开发-宣雨松读书摘要(2015-4-17 18:36)

    本书基于Unity3.5编写,通过丰富的游戏实例,以JavaScript与C#两种语言介绍Unity开发. Unity3D游戏开发-宣雨松 序 它支持JavaScript.C#.Boo三种脚本语言 ...

  10. Unity3D游戏开发之网络游戏服务器架构设计(如何做一名主程)

    下面我们开始今天的Unity3D游戏开发技能. 初期学习目标:让U3D初学者可以更快速的掌握U3D技术,自行制作修改素材,可以独立完成2D.3D小规模游戏及网页游戏开发. 今天给大家讲一下如何做一个好 ...

最新文章

  1. .exp文件_exp及expdp的主要区别及常用的导入导出操作
  2. Windows环境下搭建rocketMQ环境
  3. 科大星云诗社动态20210506
  4. 没有人会告诉您乘坐飞机时的几个事实 但是您一定要知道
  5. 有序数组中查找第一个比target大的数
  6. 【案例分享】无线唤醒技术在灌溉系统上的应用案例
  7. 【Teradata SQL】禁用和启用数据库用户登录
  8. 荣耀Magic4性能体验超苹果再次实锤!非官方游戏性能对比出炉
  9. 网卡流量监控工具vnstat的使用
  10. 根据身份证号 计算具体年龄
  11. 数据结构之图(九)——拓补排序
  12. Ubuntu vsftp搭建和C# Winform FTP操作
  13. 搜pos不为了收单而收单,互联网是个神奇的动物
  14. Kubernetes 网络插件(CNI)超过 10Gbit/s 的基准测试结果
  15. 硬盘安装FC6 linux
  16. GitChat 最火 Chat 文章合集 | 春节特别版
  17. Modulation of Lipid Metabolism by Celastrol (文献分享一组-赵倩倩)
  18. Outpost Firewall Pro
  19. 计算机无法访问指定设备路径或文件怎么回事,电脑提示Windows无法访问指定设备路径或文件如何解决?...
  20. 【python】【惰性序列】【iterator】

热门文章

  1. 安装kali之后那些事儿
  2. 浅谈虚拟桌面上线推广的最佳时机
  3. 设备驱动基础1:设备模型之总线,驱动,设备
  4. Linux下gdb调试(GUI)
  5. 转:C语言中如何将二维数组作为函数的参数传递
  6. linux的审计功能(audit)
  7. 调用虚拟内存编译时的error处理
  8. adb server is out of date killing
  9. 数据挖掘-----Apriori算法
  10. scala implicit隐式转化与隐式参数