unity3d 换装笔记
最新推荐文章于 2022-03-14 08:00:00 发布
原创
最新推荐文章于 2022-03-14 08:00:00 发布
·
1.6k 阅读
·
0
·
1
·
CC 4.0 BY-SA版权
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
unity3d
专栏收录该内容
1 篇文章
订阅专栏
首先理清CharacterCustomization例子里面的换装基本思路:
1. 对characters 目录下各个角色进行 打包.
2. 在读取的时候动态将里面的数据 读取出来即可.
这是最基本的, 但是中间有几部很重要的。
1. characters 目录下的资源是不能直接使用的.
2. 模型,材质,骨骼都是有一定关系。
3. 很多时候这种关系是通过文件名来组织在一起的。
打包的时候已经把这种关系理好了。
这种关系是:
1. 模型, 信息存储在Skinned Mesh Render 接口里. 包含蒙皮信息与模型数据的引用
2. 动作, 数据存在根节点的Animation组件内, 比如Female元件里.
3. 材质, 用文件名与模型中的联系起来
实现步骤
1. 将源资源按照内部关系生成 各种Prefab 并分好类.(用编辑器命令实现)
内部关系即, 模型材质蒙皮信息 属于哪个部件。每个部件属于哪个角色的哪不分。
原来叫 CreateAssetbundles.cs , 去除了动态加载 就叫 CreatePrefabAsset.cs
这里有个重要的点, 就是生成的数据有两种. 一种是一般的Prefab. 另一种ScriptableObject.
ScriptableObject 有点坑的是, 只能支持一些简单的数据结构, 比如Array, List. string, 等.
要有一些组合的结构, 就要另外加结构 并 在开头打上 [Serializable] 关键字。
恩, 这里还有一个概念, 就是打包的时候可能会用到一些 GameObject。 需要将其生成为Prefab后,
对他的引用才能有效, 这点很好理解, 因为动态生成的GameObject, 在编辑器命令执行完后肯定就销毁了。
2. 有了上面的 ScriptableObject 数据后。 将其组装起来即可,
骨架是直接用Prefab 克隆的, 模型数据与材质都在自定义的类, 叫 RoleElement 里 .
蒙皮的骨骼点就是用 骨骼的名称来 重新查找好了.统统这些资源都在 RoleResource 里.
剩下的重点就在怎么使用 CombineInstance组件功能 将其数据都拼接成一个模型.
当然不用 CombineInstance, 直接将各做好的部件添加到人物的root下面也行, 可效率可就低好多倍。
因为不管渲染多少次, 时间都是差不多的. 因此尽量把要的东西一次渲染, CombineInstance 帮我们做的就是这事。
这里主要的坑还是将数据打成对应的Prefab后,再成功读取出来这个步骤上。
以及 一些基本概念的理解。剩下的就看源代码吧。