いんでぃーづ

ゲームメインのブレブレブログ。ゲーム,Unity,デザイン,UI/UX

Unity : ECS全然わからない状態から、とりあえず使えるようにする

{スポンサーリンク}

ECSわかった系のスライドを読んでもよくわからなかったので、これはもう実際書いて覚えるしかないと思ったので書いてみました。

環境:Unity2018.2.12p

ECSを使えるようにプロジェクト設定

.Net4 を使う設定

メニューから File > Build Settings と選択し、ダイアログで Player Settings をクリック。

Other Settings 欄の Scripting Runtime Version で .Net 4.x Equivalent を選択する。

リスタートのダイアログが出てくるので Restart をクリック。

Entityパッケージの設定

Packages/manifest.json を編集し、以下の行を追加する。

{
  "dependencies": {
    ...
    "com.unity.entities": "0.0.12-preview.19"
  },
  "registry": "https://packages.unity.com",
  "testables": [
    "com.unity.collections",
    "com.unity.entities",
    "com.unity.jobs"
  ]
}

dependencies に入れるバージョンは公式GitHubのECSサンプルで使っているものでいいと思います。

github.com

Windows > Package Manager を選択すると、パッケージがインストールされているのを確認できる。

f:id:sugar_affordance:20181028080521p:plain

ECSを使って実装してみる

今回はいわゆる HYBRID ECS と呼ばれるもので、GameObject にアタッチしたスクリプトをECSで制御 する。
もう一つ Pure ECS というものもあるが、とっつきやすいのはHYBRID ECSだと思う。

Component スクリプトを作成

ふつうのコンポーネントを作るようにスクリプトを作成する。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ECSTestComponent : MonoBehaviour {

    public float speed;

}

インスペクタでオブジェクトごとにspeedに違う値を設定すると、違う動きにできます。

このスクリプトをふつうに GameObjectにつけます。 また、 Game Object Entity コンポーネントも同時にアタッチする。

f:id:sugar_affordance:20181028080612p:plain:w500

ComponentSystemスクリプトを作成

スクリプトを新規で作成し、

  1. まず using Unity.Entities; を先頭に追加。
  2. ComponentSystem クラスを継承させる。
  3. OnUpdate をオーバーライドしたり、操作したいコンポーネントをメンバに持つ構造体を定義したりする。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using Unity.Entities;

public class ECSTestSystem : ComponentSystem
 {
     struct TestComponents {
         public ECSTestComponent target;
     }

     protected override void OnUpdate()
     {
         foreach(var e in GetEntities<TestComponents>()) {
             // オブジェクトごとに回転させる
             e.target.transform.Rotate(
                0,
                e.target.speed * Time.deltaTime,
                0);
         }
     }

}

これはオブジェクトにアタッチさせる必要はありません。

ECSの登録を確認する

メニューから Window > Analysis > Entity Debugger とクリックすると、ECSの状態がわかります。

f:id:sugar_affordance:20181028081217j:plain:w500

f:id:sugar_affordance:20181028081257p:plain

使い方はまだよくわからん。

ゲームを実行する

ひとつの ComponentSystem スクリプトからまとめて複数のオブジェクトを回転させている。

f:id:sugar_affordance:20181028081331g:plain


・参考

Introduction to ECS - Unity

GitHub - Unity-Technologies/EntityComponentSystemSamples

Amazon.co.jpアソシエイト