[學(xué)習(xí)筆記][翻譯搬運]Unity Dots ECS 1.0 github 入門教程
https://github.com/Unity-Technologies/EntityComponentSystemSamples/blob/master/DOTS_Guide/ecs_tutorial/README.md
上面是1.0版本入門教程的對應(yīng)鏈接,原文是英文,我使用 Chrome 瀏覽器的插件翻譯為了中文,因此在接下來的截圖畫面中將出現(xiàn)中文.
原文使用的 Unity 版本是2022.2.0b8,不過在我下載2022版本的時候已經(jīng)更新到2022.2.0b10,也是本文使用的 Unity 版本.
本文將主要記錄個人在閱讀學(xué)習(xí)該文章時遇到的問題及心得體會.
不是很建議用2022.2.0b10這個版本,我過程中經(jīng)??ㄋ?
(還會盜一些教程里面的圖哈哈)

在跟隨原文創(chuàng)建了一個 3D URP 模板的項目后,開局就彈了一個 URP 材質(zhì)需要升級的窗口,我們直接升級就是了.

接下來是安裝 DOTS 包,這一步可能會出現(xiàn)網(wǎng)絡(luò)問題,建議刷新或者切換網(wǎng)絡(luò)環(huán)境.
接下來進入?Edit > Project Settings > Editor 勾選?Enter Play Mode Options

然后創(chuàng)建一系列文件夾:

調(diào)整設(shè)置:

創(chuàng)建場景
創(chuàng)建子場景,命名為?EntityScene:

太長懶得打字,直接截圖了:


移除創(chuàng)建時附帶的碰撞體(Collider).
炮塔旋轉(zhuǎn)
接下來在“Scripts/Systems”文件夾中創(chuàng)建一個名為“TurretRotationSystem.cs”的新文件,復(fù)制代碼:
保存,等待代碼編譯完成,然后 Run 一下:

原文在此處有個筆記:

簡單翻譯一下就是說上文代碼中的 foreach 會旋轉(zhuǎn)所有帶 transform 的東西,我們需要修改代碼以確保代碼僅影響 Turret 這個物體.
退出播放模式
啊我在這兒直接卡了

強退進程重來,這個故事告訴我們一定要勤按 Ctrl+S
在“Scripts/Components”文件夾中創(chuàng)建一個名為“Turret.cs”的新C#源文件,將以下內(nèi)容放入其中:
在“Scripts/Authoring”文件夾中創(chuàng)建一個名為“TurretAuthoring.cs”的新C#源文件,將以下內(nèi)容放入其中:
重建了下Library文件夾,勉強解決了無限Hold on.
我們繼續(xù).
將“TurretAuthoring”組件添加到“Turret”游戲?qū)ο笾?,方法是?TurretAuthoring.cs 文件拖放到 Turret GameObject 上,或者使用游戲?qū)ο髾z查器中的“添加組件”按鈕并找到“Turret Authoring”。
修改文件夾“Scripts/Systems”中名為“TurretRotationSystem.cs”的文件內(nèi)容如下:
再次運行:

退出播放模式
坦克移動
在“Scripts/Components”文件夾中創(chuàng)建一個名為“Tank.cs”的新C#源文件,將以下內(nèi)容放入其中:
在“Scripts/Authoring”文件夾中創(chuàng)建一個名為“TankAuthoring.cs”的新C#源文件,將以下內(nèi)容放入其中:
將“TankAuthoring”組件添加到“Tank”游戲?qū)ο?
在“Scripts/Systems”文件夾中創(chuàng)建一個名為“TankMovementSystem.cs”的新C#源文件,將以下內(nèi)容放入其中:
Run!

制作炮彈
在“Scripts/Components”文件夾中創(chuàng)建一個名為“CannonBall.cs”的新C#源文件,將以下內(nèi)容放入其中:
在“Scripts/Authoring”文件夾中創(chuàng)建一個名為“CannonBallAuthoring.cs”的新C#源文件,將以下內(nèi)容放入其中:
在 Hierarchy 窗口中右鍵單擊“SampleScene”,選擇GameObject > 3D Object > Sphere
并將新的 GameObject 命名為“CannonBall”。將其位置設(shè)置為 (0,0,0),旋轉(zhuǎn)設(shè)置為 (0,0,0),縮放設(shè)置為 (0.2,0.2,0.2).
將“CannonBallAuthoring”組件添加到“CannonBall”游戲?qū)ο?
從“CannonBall”游戲?qū)ο笾幸瞥癝phere Collider”組件.
將“CannonBall”游戲?qū)ο笸戏诺巾椖看翱谥械摹癙refabs”文件夾中.
從“SampleScene”中刪除“CannonBall”游戲?qū)ο螅ìF(xiàn)在是一個預(yù)制體實例).

修改文件夾“Scripts/Components”中名為“Turret.cs”的文件內(nèi)容如下:
修改文件夾“Scripts/Authoring”中名為“TurretAuthoring.cs”的文件內(nèi)容如下:
選擇“Turret”游戲?qū)ο?,并將“Turret Authoring”組件的新字段“CannonBallPrefab”和“CannonBallSpawn”分別設(shè)置到Project文件夾中的“CannonBall”預(yù)制件(拖放)和“SpawnPoint”游戲?qū)ο螅◤腍ierarchy窗口拖放)

在“Scripts/Aspects”文件夾中創(chuàng)建一個名為“TurretAspect.cs”的新C#源文件,將以下內(nèi)容放入其中:
在“Scripts/Systems”文件夾中新建一個名為“TurretShootingSystem.cs”的C#源文件,將以下內(nèi)容放入其中:
Run!

炮彈移動
在“Scripts/Aspects”文件夾中創(chuàng)建一個名為“CannonBallAspect.cs”的新C#源文件,將以下內(nèi)容放入其中:
進入游戲模式,炮彈現(xiàn)在正在遠離坦克并在地面上彈跳:

放置多個坦克
將“坦克”游戲?qū)ο髲摹癊ntityScene”拖放到項目窗口中的“Assets/Prefabs”文件夾中.
從“EntityScene”中刪除“Tank”游戲?qū)ο螅ìF(xiàn)在是一個預(yù)制體實例).
在“Scripts/Components”文件夾中創(chuàng)建一個名為“Config.cs”的新C#源文件,將以下內(nèi)容放入其中:
在“Scripts/Authoring”文件夾中創(chuàng)建一個名為“ConfigAuthoring.cs”的新C#源文件,將以下內(nèi)容放入其中:
在 Hierarchy 窗口中右鍵單擊“EntityScene”,選擇Create Empty
并將新的 GameObject 命名為“Config”.
將“ConfigAuthoring”組件添加到“Config”游戲?qū)ο?
選擇“Config”游戲?qū)ο螅瑢⑿伦侄巍癟ankPrefab”設(shè)置為 Project 文件夾中的“Tank”預(yù)制件(拖放),將“TankCount”設(shè)置為 20,將“SafeZoneRadius”設(shè)置為 15.

“SafeZoneRadius”尚未使用,但與后續(xù)步驟相關(guān)。
在“Scripts/Systems”文件夾中創(chuàng)建一個名為“TankSpawningSystem.cs”的新C#源文件,將以下內(nèi)容放入其中:
如果您此時進入游戲模式,您可能會驚訝地看到只有一個坦克.實際上有 20 輛坦克,但它們都在相同的位置生成并以完全相同的方式移動.
修改文件夾“Scripts/Systems”中名為“TankMovementSystem.cs”的文件內(nèi)容如下:
然后就可以Run了:

給坦克和炮彈上色
找到我們的坦克(Tank)預(yù)制體,給Tank,Turret以及Cylinder添加?URPMaterialPropertyBaseColor組件,這個時候我們就可以得到全黑的坦克啦.

修改文件夾“Scripts/Systems”中名為“TankSpawningSystem.cs”的文件內(nèi)容如下:
如果這個時候播放,就可以得到隨機顏色的坦克了.

修改文件夾“Scripts/Authoring”中名為“CannonBallAuthoring.cs”的文件內(nèi)容如下:
修改文件夾“Scripts/Aspects”中名為“TurretAspect.cs”的文件內(nèi)容如下:
修改文件夾“Scripts/Systems”中名為“TurretShootingSystem.cs”的文件內(nèi)容如下:
現(xiàn)在再播放,子彈也上色了.

安全區(qū)
在“Scripts/Components”文件夾中創(chuàng)建一個名為“Shooting.cs”的新C#源文件,將以下內(nèi)容放入其中:
修改文件夾“Scripts/Authoring”中名為“TurretAuthoring.cs”的文件內(nèi)容如下:
在“Scripts/Systems”文件夾中創(chuàng)建一個名為“SafeZoneSystem.cs”的新C#源文件,將以下內(nèi)容放入其中:
修改文件夾“Scripts/Systems”中名為“TurretShootingSystem.cs”的文件內(nèi)容如下:
確保在視圖選項中啟用了 Gizmo,否則您將看不到白色圓圈。


相機跟隨
在“Scripts/MonoBehaviours”文件夾中創(chuàng)建一個名為“CameraSingleton.cs”的新C#源文件,將以下內(nèi)容放入其中:
將“CameraSingleton”MonoBehaviour 添加到“SampleScene”中的“Main Camera”游戲?qū)ο?
在“Scripts/Systems”文件夾中創(chuàng)建一個名為“CameraSystem.cs”的新C#源文件,將以下內(nèi)容放入其中:
進入播放模式,查看 Game 視圖(而不是之前的 Scene 視圖),并注意相機正在跟隨其中一輛坦克。確保 Game 視圖具有輸入焦點(單擊它),然后反復(fù)按空格鍵。相機每次都應(yīng)該切換到另一個隨機坦克。

結(jié)束
