プロジェクトを開く
今回はProjectTinySamples/Tiny3D
を開きます。
眺める
プロジェクト自体は風車がくるくる回るだけのようです。
このシーンで用意されているスクリプトは2つあります。
Assets/Scripts/Components/Rotate.cs
回転に必要な要素を持つコンポーネントです。
using UnityEngine; using Unity.Entities; namespace Tiny3D { [GenerateAuthoringComponent] public struct Rotate : IComponentData { public float speedX; public float speedY; public float speedZ; } }
GenerateAuthoringComponent属性
これはGameObjectをEntityに自動で変換してくれるものです。
今までIConvertGameObjectToEntity
を継承したクラスを作り、EntityManagerにコンポーネントをセットする必要がありました。
Assets/Scripts/Systems/RotationSystem.cs
using System; using Unity.Burst; using Unity.Entities; using Unity.Mathematics; using Unity.Transforms; using Unity.Tiny; using UnityEngine; namespace Tiny3D { public class RotationSystem : SystemBase { protected override void OnUpdate() { float time = (float)Time.ElapsedTime; Entities.ForEach((ref Rotate rotate, ref Rotation rotation) => { quaternion qx = quaternion.RotateX(time * rotate.speedX); quaternion qy = quaternion.RotateY(time * rotate.speedY); quaternion qz = quaternion.RotateZ(time * rotate.speedZ); rotation.Value = math.normalize(math.mul(qz, math.mul(qy, qx))); }).ScheduleParallel(); } } }
SystemBase
Systemを実装するのに必要なクラスになります。一連のライフサイクルイベントが定義されおり、全てメインスレッドで動作します。
- OnCreate()
- GameObjectのAwake関数にあたります。
- OnStartRunning()
- GameObjectのOnEnable関数にあたります。
- OnUpdate()
- GameObjectのUpdate関数にあたります。
- OnStopRunning()
- GameObjectのOnDisable関数にあたります。
- OnDestroy()
- GameObjectのOnDestroy関数にあたります。