ECS官方案例 5. SpawnFromMonoBehaviour

基于Unity2019最新ECS架构开发MMO游戏笔记4

  • 官方案例解析5
    • 5. SpawnFromMonoBehaviour
    • 小结
      • DOTS 逻辑图表
  • 更新计划
    • 作者的话
  • ECS系列目录
    • ECS官方示例1:ForEach
    • ECS官方案例2:IJobForEach
    • ECS官方案例3:IJobChunk
    • ECS官方案例4:SubScene
    • ECS官方案例5:SpawnFromMonoBehaviour
    • ECS官方案例6:SpawnFromEntity
    • ECS官方案例7:SpawnAndRemove
    • ECS进阶:FixedTimestepWorkaround
    • ECS进阶:Boids
    • ECS进阶:场景切换器
    • ECS进阶:MegaCity0
    • ECS进阶:MegaCity1
    • UnityMMO资源整合&服务器部署
    • UnityMMO选人流程
    • UnityMMO主世界

官方案例解析5

开始之前的准备工作:
0下载Unity编辑器(2019.1.0f1 or 更新的版本),if(已经下载了)continue;
1下载官方案例,打开Git Shell输入:
git clone https://github.com/Unity-Technologies/EntityComponentSystemSamples.git --recurse
or 点击Unity官方ECS示例下载代码
if(已经下载了)continue;
2用Unity Hub打开官方的项目:ECSSamples
3在Assets目录下找到HelloCube/5. SpawnFromMonoBehaviour ,并打开SpawnFromMonoBehaviour 场景

5. SpawnFromMonoBehaviour

这个案例演示了我们如何使用预设游戏对象来生成实体和组件,场景将由此生成一大堆旋转的方块对,下面一起来一探究竟吧:

  • Main Camera ……主摄像机
  • Directional Light……光源
  • Spawner……旋转方块生成器

我们注意到RotatingCube不见了,取而代之的是一个Spawner生成器,原来旋转的方块儿被做成预设Prefab了,被Spawner上的Spawner_FromMonoBehaviour脚本引用,下面我们来看一下这个脚本是如何生成实体和组件的:

/// 
/// 生成旋转的方块儿实体以及其组件
/// 
public class Spawner_FromMonoBehaviour : MonoBehaviour
{
    /// 
    /// 旋转的方块儿预设
    /// 
    public GameObject Prefab;
    public int CountX = 100;
    public int CountY = 100;

    void Start()
    {
        // Create entity prefab from the game object hierarchy once
        //一次性从游戏对象层级中创建实体预设
        var prefab = GameObjectConversionUtility.ConvertGameObjectHierarchy(Prefab, World.Active);
        //缓存实体管理器
        var entityManager = World.Active.EntityManager;

        for (var x = 0; x < CountX; x++)
        {
            for (var y = 0; y < CountY; y++)
            {
                // Efficiently instantiate a bunch of entities from the already converted entity prefab
                //从已经转化的实体中高效地实例化一大堆实体
                var instance = entityManager.Instantiate(prefab);

                // Place the instantiated entity in a grid with some noise
                //把实例化的实体放进随机噪点的格子中
                var position = transform.TransformPoint(new float3(x * 1.3F, noise.cnoise(new float2(x, y) * 0.21F) * 2, y * 1.3F));
                entityManager.SetComponentData(instance, new Translation {Value = position});
            }
        }
    }
}

这里需要补充说明的是SetComponentData方法,该方法将数值传进组件中,并让组件储存起来。
生成的方块就是案例2.IJobForEach中的方块,它们会按照案例2的ECS系统运行起来,这个流程是DOTS驱动的,无需额外代码。这也算是ECS的优势吧,随时随地的复用,一开始我们觉得麻烦,到这里复用代码的时候,就会觉得轻松了。

小结

以前写的系统,就是我们制定的规则,规则存在就会运行起来,无需额外编写代码!

这就是所谓更加干净,且高效的代码!

DOTS 逻辑图表

Spawn流程大体如下:

ConvertGameObjectHierarchy
Instantiate
SetComponentData
Prefab
Entity
EntityManager
Entities
DOTS

DOTS系统:

Data
Schedule
OnUpdate
Entities
Component
System
Burst
Jobs
ForEach
System Burst Jobs Entities 你好!任务交给你快速编译一下? 编译好了,任务交给你安排执行? 不好意思,你们的旋转已经排上日程了! 全体都有,集合,向右看齐,向前看,转起来! 我们不想转,我们要放假! 又转起来了! 为什么会说“又”? 旋转,跳跃 我闭着眼…… System Burst Jobs Entities

这一篇因为复用了之前第二篇,所以很简单,ECS越到后期就越简单吧,因为复用的组件和系统都会越来越多的。

更新计划

Mon 12 Mon 19 Mon 26 1. ForEach 2. IJobForEach 3. IJobChunk 4. SubScene 5. SpawnFromMonoBehaviour 6. SpawnFromEntity 7. SpawnAndRemove 休息 修正更新计划 参加表哥婚礼 进阶:FixedTimestepWorkaround 进阶:BoidExample 进阶:SceneSwitcher 我是休息时间 资源整合 部署服务器 启动流程 登录流程 游戏主世界 待计划 待计划 待计划 待计划 待计划 我是休息时间 待计划 待计划 待计划 待计划 待计划 我是休息时间 读取Excel自动生成Entity 读取Excel自动生成Component 读取数据库自动生成Entity 读取数据库自动生成Component ESC LuaFrameWork Skynet DOTS 官方示例学习笔记 -----休息----- 基于ECS架构开发MMO学习笔记 LuaFrameWork学习笔记 -----休息----- 基于Skynet架构开发服务器学习笔记 制作代码自动生成工具 总结 基于Unity2019最新ECS架构开发MMO游戏笔记

作者的话

AltAlt

如果喜欢我的文章可以点赞支持一下,谢谢鼓励!如果有什么疑问可以给我留言,有错漏的地方请批评指证!
如果有技术难题需要讨论,可以加入开发者联盟:566189328(付费群)为您提供有限的技术支持,以及,心灵鸡汤!
当然,不需要技术支持也欢迎加入进来,随时可以请我喝咖啡、茶和果汁!( ̄┰ ̄*)

ECS系列目录

ECS官方示例1:ForEach

ECS官方案例2:IJobForEach

ECS官方案例3:IJobChunk

ECS官方案例4:SubScene

ECS官方案例5:SpawnFromMonoBehaviour

ECS官方案例6:SpawnFromEntity

ECS官方案例7:SpawnAndRemove

ECS进阶:FixedTimestepWorkaround

ECS进阶:Boids

ECS进阶:场景切换器

ECS进阶:MegaCity0

ECS进阶:MegaCity1

UnityMMO资源整合&服务器部署

UnityMMO选人流程

UnityMMO主世界

你可能感兴趣的:(ECS,Unity,DOTS,Unity,ECS,游戏开发)