Unity ProjectTiny在纯ECS运行时动态创建Mesh

本文介绍了在Unity的ProjectTiny环境中,如何在纯DOTS运行时动态创建Mesh。通过对比传统MonoBehavior与ECS创建Quad网格的差异,展示了ECS实现的复杂性。在Ubuntu20.04和Unity2020.1.17上,作者简化了官方RuntimeGeometry3D示例,创建了一个基本的动态Quad Mesh。代码示例可在Tiny3D工程中运行,展示了一个旋转的红色方块,支持Web和Android平台。运行Web版本需要注意浏览器的跨域设置。
摘要由CSDN通过智能技术生成

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</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值