应用场景:
- 一个携带武器的人物的FBX文件中,包含“人物”与“武器”两个模型
- 在人物进行攻击时,需要单独提取武器模型,然后创建一个副本作为子弹发射出去
当然将其分割为2个FBX文件可以解决这个问题,但是两个文件会使得资源文件变得更大,当模型多了以后也是不小的开销。
这里想讨论一下能否在一个文件中通过name去获取指定的模型呢?
测试了3.4的代码后发现情况是这样子的
- 在模型没有骨骼数据的时候,引擎是将每个模型作为子节点加入到root节点的,这中模型可以通过getchild的方式获取具体模型对象(sprite3d)
- 在模型包含骨骼数据的时候,引擎是将每个模型的mesh数据统一放在(Vector<Mesh*> _meshes;)中进行绘制的,这种方式只能获取具体的模型的网格数据(mesh)
- Sprite3D的构造函数是protected的,所以没有办法通过“直接创建一个空的sprite3d对象,然后设置mesh数据”的方式来生成一个特定的模型对象。
目前的sprite3d只能通过正确的模型路径来创建一个整体的对象,这种方式保障了正确的cache流程,在资源和效率有不错的效果,但是却显得不太灵活。
实际的开发需求是多样化的,希望能在未来提供这样的功能。
附:目前写了一个临时方案
- 在sprite3d中新增了一个创建流程,传入需要创建的具体模型的name,在创建mesh时比较一下name,只创建具体的mesh
- 在加入到cache时候使用path+name额外缓存具体的模型数据
这样有两个问题:1.增加了额外的缓存信息,2.创建出来的模型是由骨骼动作已经过旋转变换的