EntitiesSample_8. GameObjectSync

知识点

1.UNITY_DISABLE_MANAGED_COMPONENTS:示例中使用这个宏,表示系统中是否需要托管组件的支持,在该示例中是需要访问托管组件的,所以这个值是false,在unity中,有的时候需要宏定义来区分代码,比如对应不同的平台编译不同的代码,通常在一下的位置添加脚本的宏定义

Edit > Project Settings > Player > Scripting Define Symbols

2.在非托管系统中访问托管组件,也就是在ecs系统中访问mono的组件,函数是不能添加这个BurstCompile标签的

3.示例中创建一个ecs组件引用托管组件,DirectoryManaged组件引用的托管的组件

//操作流程

//该OnUpdate函数不会循环执行,这块的作用应该是类似于start的作用,只执行这一次

state.Enabled = false;

//找到托管世界中的对象

var go = GameObject.Find("Directory");

if (go == null)

{

throw new Exception("GameObject 'Directory' not found.");

}

//获取托管组件的引用

var directory = go.GetComponent<Directory>();

//创建一个非托管组件的实例

var directoryManaged = new DirectoryManaged();

// 托管组件引用复制到非托管组件

directoryManaged.RotatorPrefab = directory.RotatorPrefab;

directoryManaged.RotationToggle = directory.RotationToggle;

//创建一个实体挂载该非托管组件

var entity = state.EntityManager.CreateEntity();

state.EntityManager.AddComponentData(entity, directoryManaged);

4.在非托管中克隆GameObject(托管对象)和托管中一样,直接访问托管的api创建GameObject

var go = GameObject.Instantiate(directory.RotatorPrefab);

需要把这个引用go存起来,在非托管中创建一个组件存这个引用,然后找一个实体挂载这个组件,

如果我们要在ISystem中控制托管世界中的对象,就需要找到上面创建的实体,然后获取引用设置组件的值,特别注意的是在所有的访问托管的函数中,都不可以加上爆发编译的标签

上面的克隆和ecb.CreateEntity,EntityManager.CreateEntity,本质的区别就是,前面的是克隆的托管对象存在传统世界中,后面的两个是创建的非托管实体对象,存在ECS的世界中

相关推荐
寂寞的船19 小时前
【Unity Bug挑战】第12期 Awaitable 二次 await 死锁之谜 —— 为什么同一个异步操作等两次就卡死?
unity·c#·游戏引擎·bug
探求虚无2 天前
用 AI 在 Unity 里做一款 RTS:最难的不是生成代码,而是证明它真的能玩
人工智能·unity·游戏引擎
17岁的勇气3 天前
Unity Shader unity文档学习笔记(二十二):shader变体
笔记·学习·unity
寂寞的船4 天前
【Unity知识速递】第10期 Unity GC 零分配实战:从 UnityEngine.Pool 到手动 GC 控制的全链路优化
jvm·unity·c#·游戏引擎·lucene
寂寞的船6 天前
【Unity知识速递】第8期 IL2CPP 托管堆内存碎片与原生堆交互机制深度解析
unity·游戏引擎·交互
寂寞的船7 天前
【Unity知识速递】第5期 Unity 6.2 深度解析:AI Assistant 登场,World Space UI 与 Sentis 全面升级
人工智能·ui·unity
寂寞的船7 天前
【Unity知识速递】第4期 MCP for Unity:用 AI 自然语言控制编辑器
人工智能·unity·编辑器
淡海水7 天前
09-04-内存-Unity原生对象生命周期
unity·c#·游戏引擎·gc
寂寞的船7 天前
【Unity知识速递】第6期 URP性能优化完全指南:从内存到GPU的三维调优
unity·性能优化·编辑器
寂寞的船7 天前
【Unity Bug挑战】第10期 SerializeReference 内存泄漏之谜
unity·c#·游戏引擎·bug