2018-12-26 【ECS + JOB】阶段总结

经过较长时间的折磨,一遍一遍的修改,发现了该系统目前的一些问题,并更深的理解了它的设计理念。


image.png

先回忆一下这段代码形成到这一步,最终还是失败的经历:
目标:给大批量的quad贴上完全不同的贴图。
1.第一个想法是获取renderer组件。通过renderer.setMaterialProperty方法,可以使用GPUinstancing的材质,方便高效的换贴图。 失败原因:目前不支持获得。只能获得MeshInstanceRenderer
2.第二个想法是,既然无法使用共同的材质,那么给每个mesh不同的材质。然后,使用JobSystem制作两个Job,第一个Job是批量将图片文件读到byte[]中,第二个Job就是跟上面那个差不多了,获取对应的材质,给材质的“_MainTex”上贴图。
第一个Job最终失败了,失败原因,我猜测是这样:在Job中传递的数据需要是固定长度的,或者是NativeArray这种安全结构,不能是NativeArray但是NativeArray>也许可以但我选择放弃。不能在里面再次分配内存。而我这个byte[]需要在里面分配内存赋值。报了错,好像是“分配内存没有dipose”这种。然而我不需要dipose啊。。。
第二个Job失败原因大致如上所述了。一开始告诉我,不能在数据结构里面放对象,所以我只放了数字索引,把对象和数据都储存在静态内存中。后面告诉我,无法获得material.Texture所以我直接使用Texture。最后一步,真是无法了,核心的一个函数也告诉我只能在主线程中使用!!!

总结:
看了官方的例子,还有很多功能和写法是目前没有掌握的。
不过目前来看,这个东西主要是对已有的数据进行简单批量的处理。比如说,位置的变换;共享Mesh,Material物件的批量生成,这种。
这种写法经过痛苦的折磨,已经可以理解了。。
等待更强大的支持出现。目前支持使用的东西还是太少了,或者是可以支持,用起来

你可能感兴趣的:(2018-12-26 【ECS + JOB】阶段总结)