位置: 编程技术 - 正文

Unity3D游戏开发之换装系统的实现(Unity3D游戏开发标准教程吴亚峰于复兴人民邮电出版社)

编辑:rootadmin

推荐整理分享Unity3D游戏开发之换装系统的实现(Unity3D游戏开发标准教程吴亚峰于复兴人民邮电出版社),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:Unity3D游戏开发pdf,Unity3D游戏开发pdf,unity3D游戏开发,Unity3D游戏开发引擎,Unity3D游戏开发(第2版)pdf,Unity3D游戏开发(第2版),Unity3D游戏开发毕业论文,unity3D游戏开发,内容如对您有帮助,希望把文章链接给更多的朋友!

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

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

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

一、增加式换装

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

Unity3D游戏开发之换装系统的实现(Unity3D游戏开发标准教程吴亚峰于复兴人民邮电出版社)

二、更新式换装

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

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

[csharp] view plaincopyprint?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<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())) { 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())) { 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; } } 这里我们提供两套外装。我们把脚本拖放到模型上,然后编辑贴图数组:

编辑好贴图后,我们就可以运行程序了,注意贴图要和模型网&#;匹配。运行效果:

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

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

Unity3D的断点调试功能 断点调试功能可谓是程序员必备的功能了。Unity3D支持编写js和c#脚本,但很多人可能不知道,其实Unity3D也能对程序进行断点调试的。调试有两种方式,

Unity3D之手游开发中特殊的文件夹 这里列举出手游开发中用到了所有特殊文件夹。1.EditorEditor文件夹可以在根目录下,也可以在子目录里,只要名子叫Editor就可以。比如目录:/xxx/xxx/Editor

Unity3d获取所有子物体 foreach(Transformchildintransform){Debug.Log(child.gameObject.name);}转自:

标签: Unity3D游戏开发标准教程吴亚峰于复兴人民邮电出版社

本文链接地址:https://www.jiuchutong.com/biancheng/380109.html 转载请保留说明!

上一篇:unity3d之使用ugui 创建仪表盘(unity 3d ui)

下一篇:Unity3D的断点调试功能(unity二段跳)

  • 增值税为什么不重复征税
  • 管理费用不计入成本吗?
  • 个人住房5年后买卖如何交税?
  • 储值卡金额算什么科目
  • 餐饮流水账表格excel
  • 小型微利企业季度申报
  • 个人所得税申报退税多久到账
  • 新增资产额怎么计算
  • 享受专项附加扣除该怎么申报
  • 年前买东西
  • 年末增值税结转账务处理流程
  • 收到电子银行承兑汇票的账务处理
  • 应纳税调增调减会计分录
  • 已认证的进项税额转出如何操作
  • 长期股权投资顺流交易固定资产
  • 建筑图纸设计费包括晒图费吗
  • 空调减值损失属于什么科目?
  • 销售礼盒增值税税率
  • 转让法人要注意什么
  • 增值税票查无此票是什么原因
  • 生产企业出口发票数量开错有什么影响
  • 水电开发潜力
  • 环保费用计入哪个科目
  • 筹建期水电费计入什么科目
  • 资产相关的递延收益
  • 税控设备实际抵减增值税时如何做分录?
  • 企业取得的土地使用权应作为固定资产核算
  • 同比增长率为负数怎么算
  • 公司审计期间
  • 金蝶k3外购入库核算没单据
  • 贴现利息会计处理
  • 离职违约金赔偿标准
  • php参数过滤封装类
  • 职工教育经费怎么做凭证
  • win10关闭端口号
  • linux漏洞复现
  • wrme.exe是什么
  • 房屋出租房产税如何计算
  • Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
  • 季报的利润表本月金额填的是当月数可以吗
  • 孪生神经网络 计算相似度
  • php gdb
  • php怎么上传图片并保存到数据库
  • linux清理文件内容
  • 固定资产计提完折旧报废的账务处理
  • 业务预算包括直销费用吗
  • 房地产返佣
  • python 覆盖
  • 金税盘离线开票时间超限怎么办
  • 税前利润包含
  • 汇算清缴后发现成本多做了
  • sql server如何操作
  • 金融商品转让一半增值税
  • 暂估成本跨年后收到票可以直接附在暂估凭证
  • 政府会计制度应收账款坏账准备
  • 委托加工环节应税消费品应纳税额的计算
  • 工商年报认缴时间过期了怎么办
  • 土地使用权的摊销计入在建工程
  • 什么叫递延收益和其他收益
  • 做无票收入如何报税
  • 百分百控股收益都是股东的么
  • 公司银行开户的一些资料是公司办公室保存还是财务保存
  • 固定资产的建造成本怎么计算
  • mysql函数大全以及举例
  • ubuntu debian
  • linux中使用fdisk命令进行硬盘分区
  • windows log在哪里
  • xp系统怎么打开启动项
  • fsm32.exe是什么进程 有什么作用 fsm32进程查询
  • linux中修改命令
  • P2P Networking2.exe - P2P Networking2是什么进程 有什么用
  • jqgrid动态生成表头
  • shell脚本命令行参数
  • 解决口苦的最佳方法
  • python访问地址
  • python同一层次的语言必须对齐吗
  • js window.screen
  • 纳税人不如实申报税收怎么办
  • 广东税务个人账号注销后会怎样
  • 武汉税务局的电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设