ProjectTiny包是一个纯DOTS环境,可以在Unity里体验下完全用ECS来写代码的感觉。
学习了解了下如何在DOTS环境下动态创建一个Quad网格。在MonoBehavior里创建一个Quad只需要两三行代码,在ECS里创建一个最简单的Quad Mesh,代码都要多好几倍。开发环境用的是Ubuntu20.04,Unity2020.1.17,ProjectTiny0.32。
官方有个列子RuntimeGeometry3D可以根据鼠标路径来创建网格路线,不过里边代码比较多,看起来有点麻烦。通过创建一个最简单的Quad,更方便了解其中的原理。直接上代码:
using Unity.Collections;
using Unity.Entities;
using Unity.Mathematics;
using Unity.Transforms;
using Unity.Tiny.Rendering;
namespace Tiny3D {
public class CreateQuadMeshSystem : SystemBase
{
protected override void OnUpdate()
{
var quadEntity = EntityManager.CreateEntity();
// 添加储存顶点数据的Buffer
EntityManager.AddBuffer<DynamicLitVertex>(quadEntity);
// 添加储存顶点下标的Buffer
EntityManager.AddBuffer<DynamicIndex>(quadEntity);
var vertex = EntityManager.GetBuffer<DynamicLitVertex>(quadEntity); // 不能直接用AddBuffer接口返回的,要再GetBuffer一下,不然运行会报错
var index = EntityManager.GetBuffer<DynamicIndex>(quadEntity);
vertex.Capacity = 4;
vertex.ResizeUninitialized(4);
index.Capacity = 6</