一个fbx文件包含多个模型对象时,如何单独获取其中某个模型

应用场景:

  1. 一个携带武器的人物的FBX文件中,包含“人物”与“武器”两个模型
  2. 在人物进行攻击时,需要单独提取武器模型,然后创建一个副本作为子弹发射出去

当然将其分割为2个FBX文件可以解决这个问题,但是两个文件会使得资源文件变得更大,当模型多了以后也是不小的开销。
这里想讨论一下能否在一个文件中通过name去获取指定的模型呢?

测试了3.4的代码后发现情况是这样子的

  1. 在模型没有骨骼数据的时候,引擎是将每个模型作为子节点加入到root节点的,这中模型可以通过getchild的方式获取具体模型对象(sprite3d)
  2. 在模型包含骨骼数据的时候,引擎是将每个模型的mesh数据统一放在(Vector<Mesh*> _meshes;)中进行绘制的,这种方式只能获取具体的模型的网格数据(mesh)
  3. Sprite3D的构造函数是protected的,所以没有办法通过“直接创建一个空的sprite3d对象,然后设置mesh数据”的方式来生成一个特定的模型对象。

目前的sprite3d只能通过正确的模型路径来创建一个整体的对象,这种方式保障了正确的cache流程,在资源和效率有不错的效果,但是却显得不太灵活。
实际的开发需求是多样化的,希望能在未来提供这样的功能。

附:目前写了一个临时方案

  1. 在sprite3d中新增了一个创建流程,传入需要创建的具体模型的name,在创建mesh时比较一下name,只创建具体的mesh
  2. 在加入到cache时候使用path+name额外缓存具体的模型数据

这样有两个问题:1.增加了额外的缓存信息,2.创建出来的模型是由骨骼动作已经过旋转变换的

mark等答案

我觉得你还是把武器单独做出来会好一些吧,也不会大多少啊,因为武器只有一些顶点数据而已,而且你做到一起的话不考虑换武器的需求么?