[学习笔记][翻译搬运]Unity Dots ECS 1.0 github 入门教程
https://github.com/Unity-Technologies/EntityComponentSystemSamples/blob/master/DOTS_Guide/ecs_tutorial/README.md
上面是1.0版本入门教程的对应链接,原文是英文,我使用 Chrome 浏览器的插件翻译为了中文,因此在接下来的截图画面中将出现中文.
原文使用的 Unity 版本是2022.2.0b8,不过在我下载2022版本的时候已经更新到2022.2.0b10,也是本文使用的 Unity 版本.
本文将主要记录个人在阅读学习该文章时遇到的问题及心得体会.
不是很建议用2022.2.0b10这个版本,我过程中经常卡死.
(还会盗一些教程里面的图哈哈)

在跟随原文创建了一个 3D URP 模板的项目后,开局就弹了一个 URP 材质需要升级的窗口,我们直接升级就是了.

接下来是安装 DOTS 包,这一步可能会出现网络问题,建议刷新或者切换网络环境.
接下来进入 Edit > Project Settings > Editor 勾选 Enter Play Mode Options

然后创建一系列文件夹:

调整设置:

创建场景
创建子场景,命名为 EntityScene:

太长懒得打字,直接截图了:


移除创建时附带的碰撞体(Collider).
炮塔旋转
接下来在“Scripts/Systems”文件夹中创建一个名为“TurretRotationSystem.cs”的新文件,复制代码:
保存,等待代码编译完成,然后 Run 一下:

原文在此处有个笔记:

简单翻译一下就是说上文代码中的 foreach 会旋转所有带 transform 的东西,我们需要修改代码以确保代码仅影响 Turret 这个物体.
退出播放模式
啊我在这儿直接卡了

强退进程重来,这个故事告诉我们一定要勤按 Ctrl+S
在“Scripts/Components”文件夹中创建一个名为“Turret.cs”的新C#源文件,将以下内容放入其中:
在“Scripts/Authoring”文件夹中创建一个名为“TurretAuthoring.cs”的新C#源文件,将以下内容放入其中:
重建了下Library文件夹,勉强解决了无限Hold on.
我们继续.
将“TurretAuthoring”组件添加到“Turret”游戏对象中,方法是将 TurretAuthoring.cs 文件拖放到 Turret GameObject 上,或者使用游戏对象检查器中的“添加组件”按钮并找到“Turret Authoring”。
修改文件夹“Scripts/Systems”中名为“TurretRotationSystem.cs”的文件内容如下:
再次运行:

退出播放模式
坦克移动
在“Scripts/Components”文件夹中创建一个名为“Tank.cs”的新C#源文件,将以下内容放入其中:
在“Scripts/Authoring”文件夹中创建一个名为“TankAuthoring.cs”的新C#源文件,将以下内容放入其中:
将“TankAuthoring”组件添加到“Tank”游戏对象.
在“Scripts/Systems”文件夹中创建一个名为“TankMovementSystem.cs”的新C#源文件,将以下内容放入其中:
Run!

制作炮弹
在“Scripts/Components”文件夹中创建一个名为“CannonBall.cs”的新C#源文件,将以下内容放入其中:
在“Scripts/Authoring”文件夹中创建一个名为“CannonBallAuthoring.cs”的新C#源文件,将以下内容放入其中:
在 Hierarchy 窗口中右键单击“SampleScene”,选择GameObject > 3D Object > Sphere
并将新的 GameObject 命名为“CannonBall”。将其位置设置为 (0,0,0),旋转设置为 (0,0,0),缩放设置为 (0.2,0.2,0.2).
将“CannonBallAuthoring”组件添加到“CannonBall”游戏对象.
从“CannonBall”游戏对象中移除“Sphere Collider”组件.
将“CannonBall”游戏对象拖放到项目窗口中的“Prefabs”文件夹中.
从“SampleScene”中删除“CannonBall”游戏对象(现在是一个预制体实例).

修改文件夹“Scripts/Components”中名为“Turret.cs”的文件内容如下:
修改文件夹“Scripts/Authoring”中名为“TurretAuthoring.cs”的文件内容如下:
选择“Turret”游戏对象,并将“Turret Authoring”组件的新字段“CannonBallPrefab”和“CannonBallSpawn”分别设置到Project文件夹中的“CannonBall”预制件(拖放)和“SpawnPoint”游戏对象(从Hierarchy窗口拖放)

在“Scripts/Aspects”文件夹中创建一个名为“TurretAspect.cs”的新C#源文件,将以下内容放入其中:
在“Scripts/Systems”文件夹中新建一个名为“TurretShootingSystem.cs”的C#源文件,将以下内容放入其中:
Run!

炮弹移动
在“Scripts/Aspects”文件夹中创建一个名为“CannonBallAspect.cs”的新C#源文件,将以下内容放入其中:
进入游戏模式,炮弹现在正在远离坦克并在地面上弹跳:

放置多个坦克
将“坦克”游戏对象从“EntityScene”拖放到项目窗口中的“Assets/Prefabs”文件夹中.
从“EntityScene”中删除“Tank”游戏对象(现在是一个预制体实例).
在“Scripts/Components”文件夹中创建一个名为“Config.cs”的新C#源文件,将以下内容放入其中:
在“Scripts/Authoring”文件夹中创建一个名为“ConfigAuthoring.cs”的新C#源文件,将以下内容放入其中:
在 Hierarchy 窗口中右键单击“EntityScene”,选择Create Empty
并将新的 GameObject 命名为“Config”.
将“ConfigAuthoring”组件添加到“Config”游戏对象.
选择“Config”游戏对象,将新字段“TankPrefab”设置为 Project 文件夹中的“Tank”预制件(拖放),将“TankCount”设置为 20,将“SafeZoneRadius”设置为 15.

“SafeZoneRadius”尚未使用,但与后续步骤相关。
在“Scripts/Systems”文件夹中创建一个名为“TankSpawningSystem.cs”的新C#源文件,将以下内容放入其中:
如果您此时进入游戏模式,您可能会惊讶地看到只有一个坦克.实际上有 20 辆坦克,但它们都在相同的位置生成并以完全相同的方式移动.
修改文件夹“Scripts/Systems”中名为“TankMovementSystem.cs”的文件内容如下:
然后就可以Run了:

给坦克和炮弹上色
找到我们的坦克(Tank)预制体,给Tank,Turret以及Cylinder添加 URPMaterialPropertyBaseColor组件,这个时候我们就可以得到全黑的坦克啦.

修改文件夹“Scripts/Systems”中名为“TankSpawningSystem.cs”的文件内容如下:
如果这个时候播放,就可以得到随机颜色的坦克了.

修改文件夹“Scripts/Authoring”中名为“CannonBallAuthoring.cs”的文件内容如下:
修改文件夹“Scripts/Aspects”中名为“TurretAspect.cs”的文件内容如下:
修改文件夹“Scripts/Systems”中名为“TurretShootingSystem.cs”的文件内容如下:
现在再播放,子弹也上色了.

安全区
在“Scripts/Components”文件夹中创建一个名为“Shooting.cs”的新C#源文件,将以下内容放入其中:
修改文件夹“Scripts/Authoring”中名为“TurretAuthoring.cs”的文件内容如下:
在“Scripts/Systems”文件夹中创建一个名为“SafeZoneSystem.cs”的新C#源文件,将以下内容放入其中:
修改文件夹“Scripts/Systems”中名为“TurretShootingSystem.cs”的文件内容如下:
确保在视图选项中启用了 Gizmo,否则您将看不到白色圆圈。


相机跟随
在“Scripts/MonoBehaviours”文件夹中创建一个名为“CameraSingleton.cs”的新C#源文件,将以下内容放入其中:
将“CameraSingleton”MonoBehaviour 添加到“SampleScene”中的“Main Camera”游戏对象.
在“Scripts/Systems”文件夹中创建一个名为“CameraSystem.cs”的新C#源文件,将以下内容放入其中:
进入播放模式,查看 Game 视图(而不是之前的 Scene 视图),并注意相机正在跟随其中一辆坦克。确保 Game 视图具有输入焦点(单击它),然后反复按空格键。相机每次都应该切换到另一个随机坦克。

结束
