首先理清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后,再成功读取出来这个步骤上。
以及 一些基本概念的理解。剩下的就看源代码吧。
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后,再成功读取出来这个步骤上。
以及 一些基本概念的理解。剩下的就看源代码吧。