menu Dark's Blog
2021年1月
message
2021-01-30 18:08:00

Run

Run 是直接在主线程上执行的,这个没什么需要解释的

Schedule 和 ScheduleParallel的区别

Schedule 和 ScheduleParallel 都是放在多线程上并发执行的

我目前的理解是, Schedule 是在每一个 Foreach 后生成一个 Job
而 ScheduleParallel 划分 Job 是根据 Chunk 生成的,Chunk 是按 EntityArchetype 分配的
当一个  Chunk 的空间满了后,会再生成一个 Chunk,而这每一个 Chunk 都会成为一个 Job

所以从执行效率来看,ScheduleParallel 的大多数情况应该是优于 Schedule 的
而当我们只有一个 Chunk 的时候,Schedule 和 ScheduleParallel 的效果应该是一样的

message
2021-01-21 21:13:00

使用 Convert To Entity 组件

这个可能是最简单方便的办法了,在场景中找到想要转换的 GameObject ,挂载 Convert To Entity 就可以进行转换了

需要提的一点是,这个组件有两种 Conversion Mode

Convert  And Destroy转换后 删除 原有 GameObject
Convert And Inject GameObject转换后 保留 原有 GameObject

使用 EntityManager 创建实体

这个应该是最常用的办法了,生成的Entity会生成在和 EntityManager 相同的 World 中

EntityManager.CreateEntity( )可以什么参数都不填,生成一个空的 Entity
EntityManager.CreateEntity(params ComponentType[])填入不定项个 ComponentType,可以直接生成带有这个 Component的Entity
EntityManager.CreateEntity(EntityArchetype)利用原型 Archetype 来生成 Entity
EntityManager.Instantiate(Entity)克隆一个现有的 Entity

创建一个Spawner来生成实体

我们可以创建一个用来生成的类 Spawner ,继承 MonoBehaviour ,并实现 IDeclareReferencedPrefabs ,  IConvertGameObjectToEntity 接口

这个时候需要我们去实现接口中的两个方法,其中DeclareReferencedPrefabs的操作是referencedPrefabs.Add(Prefab)
这个Prefab是我们外部加载的GameObject,这个方法会在场景中生成一个Entity类型的一个Prefab

之后我们来实现Convert这个方法
首先我们来创建一个ComponentData,我们要确保这个里面包含Entity字段,并在Convert这个方法里使用conversionSystem.GetPrimaryEntity()将这个 Prefab 转化为 Entity 加载进去

最后我们使用dstManager.AddComponentData()方法,将这个ComponentData挂载到我们之前创建好的Entity当中

此时,我们就可以利用这个Entity来创建我们外部加载的Prefab了~

【Unity】优化 —— 统一资源管理器
2021-01-15 |0 条评论
建议阅读缩放比例:150%本文技术推荐与对象池一起使用 优化—— 关于对象池为什么需要统一资源管理在之前的对象池中,我们经常需要做大量重复的动态获取,每次生成都要去 Resources.Load...
【Unity】优化 —— 关于对象池
2021-01-11 |0 条评论
建议阅读缩放比例:150%对象池是什么? 很明显,就是一个用来装对象的大池子,通常我们称拥有这种池子的人为海王(不是)在游戏运行中,经常会出现大量重复的物体,我们需要不断的去生成和删除这些对象,...
加载中... 你已抵达世界之底
加载更多