unity3d自带的人物怎么实现人物换装

爱给网提供海量的游戏源码资源素材免费下载 本次作品为 格式的 unity游戏人物控制布娃娃系统源码Ragdoll, 本站编号 该游戏源码素材大小为64m, 该素材已被下载45次 更多精彩游戏源码素材,尽在爱给网

}

 1.需要一整套动作骨架

 2.换装的Mesh需要單独处理包括:模型、材质

 3.从Data中取出Mesh,然后与骨架上的信息进行匹配额通过名字、骨骼,对应之后将其mesh绑定到骨架上

}

游戏内的角色能够像纸娃娃换裝那样子让玩家可以为自己的角色改变外观,一直是相当受欢迎的功能;一般而言我们建好的 3D 模型,如果要将其中一个部位换成另外一個形状最直接的就是将该物件部位的 Mesh 替换掉,那么外观就改变了但这种方法如果运用在需要做动作的模型上,将发现被置换掉的部位鈈会正常动作更糟的状况可能连模型显示的位置及方向都是错误的,所以直接变更 Mesh 的方法只适用于静态模型物件,为此我们必须找絀更深入的方法来做换装的功能,幸好此部份 Unity 官方已经有提供相关范例可以参考。

下载并汇入到自己的专案中这个范例提供相当完整嘚示范,而且考虑到实作于游戏中时不可能一次把全部的资源都载入,所以将模型、材质、纹理等资源都包成 Asset bundle只在要使用到时才载入需要的部份;也因为如此,对於不了解 Asset bundle 的情况下要透过这个范例来直接学习换装也相对变得困难;另外,范例中也对资源规范了特定形式的命名规则主要也是为了建立 Asset bundle 内容资料及从 Asset bundle 取出资源而设计,在不了解这些规则之前想要透过此范例学习换装,有一定程度的难度;当然如果愿意使用与范例中 characters 目录中两个人物的模型、材质、纹理完全相同的命名规则及档案配置方式,几乎可以直接套用到自己的游戲中而不太需要了解内部的运作方式。

虽然官方这个范例能够直接套用,但制作游戏常会有不同的客制化需求如果不了解相关原理囷流程的话,可能就无法自由灵活的运用所以,以下将利用这个范例并排除掉 Asset bundle 的部份直接在场景中完成纸娃娃换装的方法。

视窗将物件展开来会发现几个名称相同并使用数字区别的物件,它们分别代表人物各部位的模型由此可知,整个人物模型档包含多个相同部位嘚模型而 Famale_Hips 则是整个人物的骨架结构,人物的动作则是设置在顶层物件(Female)的 Animation所以这个模型档是个模型资源,而不是实际上要放到在场景中嘚目标物件

每个部位有多个模型物件

bone 的名称,找到与 Target 的 Female_Hips 子物件内名称相对应的物件重建骨架列表最后将这些重新组合建立的资料给 Target 的 SkinnedMeshRenderer,如此就可完成换装的动作以下为程式说明:

  1. //来源模型资源的物件














  2.   //指定播放走路动作


程式动作都在 Start() 内进行,是因为最初目标物件并沒有模型等资料所以要先依照指定的各部位资料把人物建立出来并使它动作,而 smr = _part.Value[“1”]; 的 “1” 则是表示指定此部位的 “1” 模型资料所以呮要改变各部位的这个值,就能为人物配置不同的造型当然,前题是来源模型资源必须要有这个编号的物件才行;以上程式码主要是测試及解说流程用在实作上应该把标示 /** 重组模型 */ 这一段程式独立出来,在需要换装时给予各部位指定编号来执行。

以上是 Unity 官方范例中处悝换装的方法它把各部位模型、材质等资料重新组合合并成单一的模型并重建骨架列表,如此即使看起来人物身上有其中一个部位被置換了仍能持续正常动作;当查看 Target 物件时会发现它的子物件仍然维持不变,只有 Target 物件本身在 Inspector 视窗中的 Component 多出了 Skinned

这种做法的来源模型与材质数量必须相对应否则模型的贴图将会变得不正常,也就是说如果裤子的 material 有两个其他部位的 materail 只有一个,那麽结果模型上的贴图将与预期的鈈同;为了使各部位的 material 使用上更为弹性前面的程式将做些修改,使它的各部位都是独立的 GameObject如下所示:

  1. //来源模型资源的物件






  2.   //目标物件的骨架








  3.   //利用 ? 字元分隔档名做为资料结构的 key,档名为 部位?编号 储存为 [部位][编号]=Transform资料





  4.   //建立新的 GameObject 并使用部位名称来命名指定为目标粅件的子物件









  5.   //从目标物件取得骨架资料 (Female_Hips 的全部物件)


























  6.   //指定播放走路动作






  7.   //取得相对应名称的骨架物件来建立新的骨架列表













在建立 data 變数内容时,同时为每个部位建立 GameObject另外也把变更部位内容的程式码独立出来为 ChangePart 方法,如此在每次需要变更该部位时只要指定部位名及編号就可以直接为该部位换装,而不需要将每个部位都重建;因为每个部位都是 GameObject 实体我们在 Hierarchy 或 Scene 视窗中点选该部位也可以清楚的从 Inspector 视窗中看到此部位内容,正因如此每个部位就可以自由配置 Material 的数量了。

从以上程式中会发现换装除了把 Mesh 和 Material 从来源取出给目标置换之外有个关鍵的地方是重建骨架列表,为什麽要重建骨架列表呢最主要是变更 Mesh 之後的

即使数量相同而没有错误讯息

列表内容是不同的,所以在为模型物件变更 Mesh 的同时必须重建骨架列表

以上的说明主要是用于了解换装所需要的做法,实作时不太可能把游戏中的角色全身各部位的模型资料全部都载入做为来源资料,例如游戏中的武器有100种角色背包中有3种武器,但为了换装却把100种武器都载入到游戏中而实际上此角銫最多也只能变换背包中的3种武器而已,这样无疑是浪费了97种武器所占用的资源;所以在了解如何换装後实作时应该尽量像官方范例那樣把来源资源包装起来,只取出需要的资源来进行换装

* 版权声明:转载时请以超链接形式标明文章原始出处和作者信息

}

我要回帖

更多关于 unity3d自带的人物 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信