1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ひとりアドベントカレンダーAdvent Calendar 2024

Day 10

【癒し】いっぱいの動物を動かしたーい!【Unity Entities】

Posted at

概要

動物をいっぱい表示して癒されたいよう :cry:

スクリーンショット 2024-12-09 22.58.40.png

こんな感じの可愛い奴らをさ、いっぱい出したいよう

描画

スクリーンショット 2024-12-10 0.06.40.png
かわい〜〜〜〜

Videotogif.gif

動いてくれもする

解説

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でなくてはいけないことになっているためここででエラーになる

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?