博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity3D游戏开发之换装系统的实现
阅读量:6231 次
发布时间:2019-06-21

本文共 3566 字,大约阅读时间需要 11 分钟。

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

 

 一、增加式换装

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

 

二、更新式换装

更新式换装是指角色拥有一个公共的骨骼网络和针对该模型的若干组贴图。那么,此时的换装实际上就是将贴图贴到对应的位置实现角色外观的改变,仙剑四严格来讲应该不算是换装,它实际上是做了两套模型(琼华装/野人装)。古剑奇谭的换装实际上就是这种类型的换装,这里我们以下面的一个例子,来一起学习如何实现这种类型的换装。首先我们创建一个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 ()     {       //获取SkinnedMeshRenderer       MeshEyes=transform.Find("eyes").GetComponent
(); MeshFace1=transform.Find("face-1").GetComponent
(); MeshFace2=transform.Find("face-2").GetComponent
(); MeshHair1=transform.Find("hair-1").GetComponent
(); MeshHair2=transform.Find("hair-2").GetComponent
(); MeshPants1=transform.Find("pants-1").GetComponent
(); MeshPants2=transform.Find("pants-2").GetComponent
(); MeshTop1=transform.Find("top-1").GetComponent
(); MeshTop2=transform.Find("top-2").GetComponent
(); MeshShoes1=transform.Find("shoes-1").GetComponent
(); MeshShoes2=transform.Find("shoes-2").GetComponent
(); } 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

你可能感兴趣的文章
方面和服务,差别大吗?
查看>>
Infor喜获中国智能制造与电商物流大奖
查看>>
瑞士科学家研发飞行夹克,用户可以像鸟一样任意飞翔
查看>>
互金启示录:流量思维的末路
查看>>
「镁客·请讲」镁伽机器人黄瑜清:有需求没供给,协作机器人市场存在“两极现象”...
查看>>
GoPro 研发无人机意欲如何?
查看>>
Ubuntu 16.04清楚Dash历史记录
查看>>
随机生成数的方法
查看>>
Oracle APEX 系列文章5:在阿里云上打造属于你自己的APEX完整开发环境 (进一步优化)...
查看>>
大型分布式C++框架《二:大包处理过程》
查看>>
携手科技出版巨擎 推动中国IT人才成长 51CTO与人民邮电出版社达成战略合作
查看>>
11g RAC 如何备份OCR,利用备份恢复OCR,ocrdump
查看>>
WCF序列化
查看>>
uCos-III移植到STM32F10x
查看>>
Centos下源码包安装lamp常见的几个小问题
查看>>
angularjs-过滤输入filter
查看>>
angularjs-过滤输入filter
查看>>
RAC 环境下的重要参数
查看>>
你知道,人工智能如何增强数据中心的安全性
查看>>
苗圩:从国家战略高度加快推进智能网联汽车发展
查看>>