0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Unity 6.7で追加されるEntityIdTileについて

0
Posted at

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が追加されています。

参考

従来の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へペイントできます。

ss000.png

ss001.png

2D Tilemap Extras 10.0.0では、Project SettingsにTile Creation Menu設定が追加されています。この設定では、Assets > Create > 2D > TilesにEntityIdTiles、従来のTiles、または両方のどれを表示するかを選択できます。

ss003.png

これとは別に、Tile Paletteには以前からCreate Tile Methodという設定があります。TextureやSpriteをTile Paletteへドラッグしたときに、どの方法でTile Assetを作成するかを指定する設定です。

ss002.png

Tile Creation MenuとCreate Tile Methodを適切に設定することで、「プロジェクト内のTileをEntityIdTileに統一したいのに、うっかり通常のTileを作ってしまった」というトラブルを回避することができます。

既存のTileをEntity Id Tileへ移行する

既存のTile AssetをEntity Id Tileへ変換するTile Asset Converterが用意されていす。

Window > 2D > Tile Asset Converterで、変換ツールを開きます。

ss004.png

このツールによりUnityの組み込みTileを対応するEntityIdTileへ自動変換できます。

ss005.png

Entity Id Tileの注意点

Unity Jobs / Burstを利用するためには、「Tilemapに配置されたすべてのTile」がEntityIdTileBaseから派生し、必要なメソッドを実装している必要があります。

EntityIdTileと通常のTileを混在していた場合、EntityIdTile側がUnity Jobs / Burstを使わない処理へフォールバックします。

参考

まとめ

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のアップデート、個人的にはとても嬉しいです!

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?