概要
動物をいっぱい表示して癒されたいよう
こんな感じの可愛い奴らをさ、いっぱい出したいよう
描画
動いてくれもする
解説
UnityのECSを使って実装しています
ほとんどの実装は
この動画と
この記事にまとまっています
データ周りは合体していて
public struct DobutsuIppaiHaichi : IComponentData
{
public float SpawnRadius;
public int SpawnCount;
public uint RandomSeed;
}
public struct DobutsuIppaiHaichiPrefabBuffer : IBufferElementData
{
public Entity DobutsuPrefab;
}
データ用のstructを用意して、
// バッファを使うためにDynamicでEntityを取得して。。。。
var entity = GetEntity(TransformUsageFlags.Dynamic);
// unmanagedな変数は先に入れておいて。。。
var dobutsuIppaiHaichi = new DobutsuIppaiHaichi
{
SpawnRadius = src.SpawnRadius,
SpawnCount = src.SpawnCount,
RandomSeed = src.RandomSeed
};
// バッファを追加する
var buffer = AddBuffer<DobutsuIppaiHaichiPrefabBuffer>(entity);
foreach (var prefab in src.Prefabs)
{
buffer.Add(
new DobutsuIppaiHaichiPrefabBuffer
{
// バッファに入れるプレハブも当然Dynamic
DobutsuPrefab = GetEntity(prefab, TransformUsageFlags.Dynamic)
}
);
}
データ用のエンティティにバッファも追加したりもしています
気をつけること
- SystemAPI.Queryはforeach内でしか使えない
var hoge = SystemAPI.Query<DynamicBuffer<Hoge>>();
こういうのはコンパイル時にエラーになる
- IComponentDataにはunmanagedの変数しか入れないようにする
public struct HogeData : IComponentData
{
public List<int> values;
}
こういうのはエラーにならないが、
AddComponent(GetEntity(), new HogeData());
AddComponent時にエラーになる
public void AddComponent<T>(Entity entity, in T component) where T : unmanaged, IComponentData
定義を見ると、Tはunmanagedでなくてはいけないことになっているためここででエラーになる