做网站赚钱方法,站长推荐自动跳转,博物馆网站页面设计说明,谷歌绘制的网站最近做一个项目的时候#xff0c;由于要求动态加载fbx或者glb等格式文件#xff0c;而我们自己开发加载插件难度又有点大#xff0c;所以最后使用了TriLib这个插件#xff0c;现在说一点使用心得。 由于文件加载之后要对加载的内容进行复制#xff0c;比如加载一个柱子由于要求动态加载fbx或者glb等格式文件而我们自己开发加载插件难度又有点大所以最后使用了TriLib这个插件现在说一点使用心得。 由于文件加载之后要对加载的内容进行复制比如加载一个柱子然后会把这个柱子复制很多份之类的并且在复制之后需要删除原始的物体。刚开始的时候发现一旦删除原始物体复制出来的物体就看不到了原因是物体中MeshFilter组件中的Mesh被删除了也就是说复制出来的物体和原来的物体引用的是同一个Mesh一旦删除原始物体的其引用的Mesh也会被删除这个主要是加载FBX时TriLib插件给每个新加载的模型添加了AssetUnloader组件只要这个组件被删除那么对应被加载的模型的Mesh就会被删除。后来想了个办法就是物体被加载之后把物体使用的Mesh复制一份让被加载的原始物体使用被复制的Mesh而不是原始的那个AssetUnloader组件不会删除复制的这份这样在删除原始加载的物体之后就不会让复制出来物体的Mesh消失了因为复制出来的物体使用的Mesh也是复制出来的不是那个AssetUnloader组件里面记录的。 复制Mesh的代码参考如下
MeshFilter[] filters obj.GetComponentsInChildrenMeshFilter();
for (int i 0; i filters.Length; i)
{Mesh mesh Instantiate(filters[i].sharedMesh);filters[i].sharedMesh mesh;
} 而且后来发现材质引用的Texture也会被删除干脆把Texture也复制了。 复制Texture的代码参考如下
MeshRenderer[] renders obj.GetComponentsInChildrenMeshRenderer();
for (int i 0; i renders.Length; i)
{MeshRenderer render renders[i];Material[] mats new Material[render.materials.Length];for (int j 0; j mats.Length; j){mats[j] Instantiate(render.materials[j]);Texture tex mats[j].GetTexture(_MainTex);if (tex ! null) mats[j].SetTexture(_MainTex, Instantiate(tex));}render.materials mats;
} 虽然上面的办法可以解决问题但是我感觉还是能找到一些更好的办法在想到更好的办法之前先这样吧。