Unity 6.7で、Tilemapに「EntityIdTile」系の機能が追加されます。
リリースノート「Unity 6000.7.0b2 Release Notes」中の説明を以下に示します。
2D: Added EntityIDTile/Base which can be used with Tilemap jobs and Burst.
EntityIdTileは、TileからUnity JobstとBurstを利用してデータを取得できます。この点は、experimental版を紹介した「Tilemap with Entity Id Tiles - Unity Discussions」で説明されています。
実は、EntityIdTileはUnity 6.7で初めて公開されたものではありません。Unity 6000.4.0a2以降では、2D Tilemap Extras 8.0.0-exp.1というexperimental packageとして先行提供されていました。現在Unity Docsで公開されているexperimental版のマニュアルは8.88.0-exp.2です。
この投稿ではUnity 6.7の情報をベースに、experimental版で提供されていた情報を補足資料として、EntityIdTileの紹介を行います。
なお、この投稿はベータ版である「Unity 6000.7.b2」時点の情報です。正式リリース時には変更されている場合があります。
EntityIdTileとは
EntityIdTileは、Tilemapの処理でUnity JobsとBurstを利用するためのTileです。
「Tilemap with Entity Id Tiles - Unity Discussions」において、導入の目的は「TilemapへTileを設定するときのパフォーマンス改善」と説明されています。
名前にあるEntityIdは、Unity Objectを識別するためのIDです。Unity 6.4以降では、従来の32bit整数のInstanceIDに代わって64bitのEntityId構造体が使われます。EntityIdは、GameObjectとentityがUnity Objectを識別する方法を統一するものです。
experimental版のカスタムEntityIdTileでは、Tileのデータをnative memoryに保持し、JobsとBurstから扱えるようにする仕組みが説明されています。
Unity 6.7のTileBase.OnEnable - Unity Scripting APIにも、Tileを継承したTilemapExample.AnimatedEntityIdTileがサンプルコードとして定義されています。このサンプルでは、SpriteのEntityIdをNativeArray<EntityId>へ保持しています。
またUnity 6.7向けに、2D Tilemap Extras v10.0.0が提供されています。このパッケージでは、EntityIdTile系列のAnimatedEntityIdTile、AutoEntityIdTile、RuleEntityIdTile、HexagonalRuleEntityIdTile、IsometricRuleEntityIdTileが追加されています。
参考
- Migrate from InstanceID to EntityId
- Create a custom entity tile - 2D Tilemap Extras 8.88.0-exp.2
- 2D Tilemap Extras 10.0.0 Changelog
従来のTileとの違い
大きく変わるのは、Tilemap内部でTileを処理する方法です。従来のTileは、GetTileDataを通して描画に必要なデータをTilemapへ渡します。
一方でEntityIdTileでは、こうしたTileデータの取得にUnity Jobs / Burstを利用できます。
なお内部処理は異なりますが、Inspector、Tile Palette、Tilemap APIを使う基本的なワークフローは従来と同じです。
つまり、従来に近いTilemapのワークフローを保ちながら、Tile処理をUnity Jobs / Burstへ対応させられることが、EntityIdTileの特徴です。
参考
Entity Id Tileを使ってみる
既存のTileが自動的にEntityIdTileへ変わるわけではありません。EntityIdTileのAssetを明示的に作成して使用します。
作成したTileは、通常のTileと同じようにTile Paletteへ登録し、Tilemapへペイントできます。
2D Tilemap Extras 10.0.0では、Project SettingsにTile Creation Menu設定が追加されています。この設定では、Assets > Create > 2D > TilesにEntityIdTiles、従来のTiles、または両方のどれを表示するかを選択できます。
これとは別に、Tile Paletteには以前からCreate Tile Methodという設定があります。TextureやSpriteをTile Paletteへドラッグしたときに、どの方法でTile Assetを作成するかを指定する設定です。
Tile Creation MenuとCreate Tile Methodを適切に設定することで、「プロジェクト内のTileをEntityIdTileに統一したいのに、うっかり通常のTileを作ってしまった」というトラブルを回避することができます。
- Tilemap with Entity Id Tiles - Unity Discussions
- 2D Tilemap Extras 10.0.0 Changelog
- Tile Palette tab reference for the Preferences window
既存のTileをEntity Id Tileへ移行する
既存のTile AssetをEntity Id Tileへ変換するTile Asset Converterが用意されていす。
Window > 2D > Tile Asset Converterで、変換ツールを開きます。
このツールによりUnityの組み込みTileを対応するEntityIdTileへ自動変換できます。
Entity Id Tileの注意点
Unity Jobs / Burstを利用するためには、「Tilemapに配置されたすべてのTile」がEntityIdTileBaseから派生し、必要なメソッドを実装している必要があります。
EntityIdTileと通常のTileを混在していた場合、EntityIdTile側がUnity Jobs / Burstを使わない処理へフォールバックします。
参考
- Tilemap with Entity Id Tiles - Unity Discussions
- Create a custom entity tile - 2D Tilemap Extras 8.88.0-exp.2
まとめ
Unity 6.7では、EntityIdTile系の機能が追加され、TilemapのTile処理でUnity JobsとBurstを利用できるようになります。
Inspector、Tile Palette、Tilemap APIなどの基本的なワークフローは従来とほぼ同じです。
さらに、Unity 6000.7向けの2D Tilemap Extras 10.0.0では、AnimatedTile、AutoTile、RuleTileなどにもEntityId版が追加されています。
EntityIdTileは、「従来に近いTilemapのワークフローのまま、Tile設定時のパフォーマンス改善を狙える仕組み」と捉えると分かりやすいでしょう。
Tilemapのアップデート、個人的にはとても嬉しいです!





