ECS官方案例 5. SpawnFromMonoBehaviour

官方案例解析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腳本引用,下面我們來看一下這個腳本是如何生成實體和組件的:

/// <summary>
/// 生成旋轉的方塊兒實體以及其組件
/// </summary>
public class Spawner_FromMonoBehaviour : MonoBehaviour
{
    /// <summary>
    /// 旋轉的方塊兒預設
    /// </summary>
    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
SystemBurstJobsEntities你好!任務交給你快速編譯一下?編譯好了,任務交給你安排執行?不好意思,你們的旋轉已經排上日程了!全體都有,集合,向右看齊,向前看,轉起來!我們不想轉,我們要放假!又轉起來了!爲什麼會說“又”?旋轉,跳躍我閉着眼……SystemBurstJobsEntities

這一篇因爲複用了之前第二篇,所以很簡單,ECS越到後期就越簡單吧,因爲複用的組件和系統都會越來越多的。

更新計劃

Mon 12Mon 19Mon 261. ForEach 2. IJobForEach 3. IJobChunk 4. SubScene 5. SpawnFromMonoBehaviour 6. SpawnFromEntity 7. SpawnAndRemove 休息修正更新計劃參加表哥婚禮進階:FixedTimestepWorkaround進階:BoidExample進階:SceneSwitcher我是休息時間 資源整合 部署服務器 啓動流程 登錄流程 遊戲主世界 待計劃 待計劃 待計劃 待計劃 待計劃 我是休息時間 待計劃 待計劃 待計劃 待計劃 待計劃 我是休息時間 讀取Excel自動生成Entity 讀取Excel自動生成Component讀取數據庫自動生成Entity讀取數據庫自動生成ComponentESC 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主世界

發佈了37 篇原創文章 · 獲贊 30 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章