[Unity3D]Unity3D连衣裙实现游戏开发系统

news/2024/9/17 18:08:12

         大家好,我是秦培。欢迎关注我的博客,我的博客地址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


http://lihuaxi.xjx100.cn/news/271051.html

相关文章

支付宝接口 设置支付宝订单的超时时间为15分钟

// (推荐使用&#xff0c;相对时间) 该笔订单允许的最晚付款时间&#xff0c;逾期将关闭交易。取值范围&#xff1a;1m&#xff5e;15d。m-分钟&#xff0c;h-小时&#xff0c;d-天&#xff0c;1c-当天&#xff08;1c-当天的情况下&#xff0c;无论交易何时创建&#xff0c;都在…

我都陪你坐了一天了,你好歹说句话啊!吖的,谱也忒大了。。。

我都陪你坐了一天了&#xff0c;你好歹说句话啊&#xff01;吖的&#xff0c;谱也忒大了。。。 查看图片 转载于:https://blog.51cto.com/guohongzhi521/552922

商汤提基于贪心超网络的One-Shot NAS,达到最新SOTA | CVPR 2020

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;导读&#xff1a;在CVPR 2020上&#xff0c;商汤移动智能事业群-3DAR-身份认证与视频感知组提出了基于贪心超网络的One-Shot NAS方法&#xff0c;显著提升了超网络直接在大规模数据集上的搜索训练效率&#xff0c;并在…

使用Python+OpenCV探索鲸鱼识别

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达使用曲率积分和动态时间规整&#xff0c;让我们深入研究抹香鲸识别&#xff01;前言最近&#xff0c;我们参加了Capgemini的全球数据科学挑战赛。我与Acores鲸鱼研究中心合…

共基极放大电路_「模拟电子技术」运算放大电路的共基极、共射极、共集电极接法...

1.共集接法首先&#xff0c;我们来看看共集放大电路(所谓共集&#xff0c;就是输入输出回路公用三极管的集电极C)我们的原始电路图是这样的&#xff1a;原始电路图首先&#xff0c;还是老一套&#xff0c;先进行支流分析&#xff1a;有&#xff1a;RbIBQUBEQIEQReVCC​即IBQ(VC…

微信头像可以加皇冠翅膀了,好看!

今天和大家分享一个很好看的头像。这个效果是集三款头像样式为一身&#xff0c;分别是皇冠头像、翅膀头像、艺术签名头像。那制作这个效果也非常简单。我们直接用这个生成器就可以了&#xff0c;先上传自己的头像&#xff0c;再写上自己的昵称&#xff0c;最后选择签名的颜色。…

编写高质量代码改善C#程序的157个建议——建议148:不重复代码

建议148&#xff1a;不重复代码 如果发现重复的代码&#xff0c;则意味着我们需要整顿一下&#xff0c;在继续前进。 重复的代码让我们的软件行为不一致。举例来说&#xff0c;如果存在两处相同的加密代码。结果在某一天&#xff0c;我们发现加密代码有个小Bug&#xff0c;然后…

求求你别再用offset和limit分页了

点击上方蓝色“方志朋”&#xff0c;选择“设为星标”回复“666”获取独家整理的学习资料&#xff01;译文&#xff1a;cloud.tencent.com/developer/news/676040不需要担心数据库性能优化问题的日子已经一去不复返了。随着时代的进步&#xff0c;随着野心勃勃的企业想要变成下…