この投稿は「Unity アドベントカレンダー 2023その1」の1日目の記事です。
2日目の明日は @ShoyoFILMS さんの「ワンボタンで動くゲームを作ってみた」です。
TilemapはUnityの2Dマップエディターです。この投稿では、Unity 2023.1とUnity 2023.2のTilemapのアップデートの内容を紹介します。
なお、動作検証はUnity 2023.2.1f1で行っています。2D Tilemap Extrasのバージョンは、4.0.1です。
Tilemap向けのOverlayが登場
Overlayは、Unity 2021で導入された、Scene Viewの上にUIを表示できる機能です。
Unity 2023.2で、次に示す2つのTilemap向けOverlayが導入されました。
- Tile Palette Clipboard Overlay
- Tile Palette Brush Picks Overlay
「Tile Palette Clipboard Overlay」は、Tile Palette Windowの「Main editor Window」のコンパクトなバージョンです。次の図の右下、赤枠で囲った部分がTile Palette Clipboard Overlayです。
Tile Palette Clipboard Overlayを用いることで、Scene Viewの上で素早くTileを切り替えることができます。Scene ViewとTile Palette Windowを行ったり来たりすることなく、Tileを切り替えることができるようになりました。キーボードショートカット「;」で、Tile Palette Clipboard Overlayの表示・非表示を素早く切り替えることができます。
公式ドキュメントはこちらの「Tile Palette Clipboard overlay」を参照してください。
Tile PaletteのBrushとTileの設定を保存したり、読み込みしたりできるようになりました。「Tile Palette Brush Picks Overlay」はこの設定の保存・読み込み・管理を行うためのOverlayです。次の図の右下、赤枠で囲った部分がTile Palette Brush Picks Overlayです。
BrushとTileの設定は、Pick Toolで読み込みし、Tile Palette Brush Picks Overlayで保存ボタンを押すことで、保存できます。BrushとTileの設定は、デフォルトではLibrary下に保存されます。プロジェクト設定を行えば、Assets以下の指定の場所に保存し、バージョン管理対象とすることも可能です。次の図の赤枠、Preferences Windowの2D > Tile Paletteの「Brush Picks」で設定を行います。
「このTileとこのBrushはセットで使うと便利だな〜」というのを登録しておけて、とても効率的にマップを構築できそうですね。
公式ドキュメントはこちらを参照してください。
リリースノートの記載は次のとおりです。
- 2D: Added overlay support to the Tile Palette Window.
- 2D: Added icons to the Clipboard and Brush Pick overlays for Tile Palette when the overlays are collapsed. (UUM-29771)
- 2D: Added the shortcut key to the tooltips for the toggles that activate overlays in the Tile Palette Window.
- 2D: Added Brush Picks to the Tile Palette Window.
- 2D: Added the shortcut key to the tooltips for the toggles activating overlays in the Tile Palette Window.
TileChangeDataがシリアライズ可能に
Unity 2021.2でTileChangeData構造体、およびそれを使ったTilemap型のSetTileメソッド・SetTilesメソッドが追加されました。これにより、Tileの設置、回転、色変えを1回のメソッド呼び出しで行うことができるようになりました。
Unity 2023.2でTileChangeData構造体をシリアライズできるようになりました。構造体自身にSerializable属性が、フィールドにSerializeField属性が付与されました。
リリースノートの記載は次のとおりです。
- 2D: Enabled the serialization of TileChangeData.
TileAnimationFlagsにUnscaledTimeの追加
TileAnimationFlagsに、Unity 2023.2でUnscaledTimeフラグが追加されました。
このフラグが設定されると、タイルアニメーションはTime.timeScaleとは無関係に実行されます。そうでない場合は、Time.timeScaleと連動したタイルアニメーションが実行されます。
「Time.timeScaleを0にして、ゲームを一時停止している間も、タイルアニメーションは実行したい」という状況で便利です。
どうもこちらのフォーラムでの提案から採用されたようにも見えます。
これで、TileAnimationFlagsは、次の5つになりました。
- None
- LoopOnce
- PauseAnimation
- UpdatePhysics
- UnscaledTime
リリースノートの記載は次のとおりです。
- 2D: Added: TileAnimationFlags.UnscaledTime.
TileBaseEditorの追加
CustomEditor属性を付与した特定のクラス向けのEditor拡張クラスにおいて、RenderStaticPreviewメソッドをオーバーライドすることで、Unity Editor中の対象型のアセットのアイコンを設定・変更することができます。
TileBaseという、ユーザーがScrptableTileを作る際のベースクラスとして継承して利用するクラスがあります。
このTileBaseクラス向けのEditor拡張クラス「TileBaseEditorクラス」が新たに追加されました。TileBaseEditorクラスで、RenderStaticPreviewメソッドが実装され(オーバーライドされ)、TileBaseクラスを継承したクラスは、シンプルなデフォルトプレビューが勝手にされるようになりました。
リリースノートの記載は次のとおりです。
- 2D: Added: TileBaseEditor with an implementation for RenderStaticPreview, which allows users who extend from the TileBase class to have a simple default asset preview for their extended classes of TileBase.
Tilemap.loopEndedForTileAnimationの追加
Tilemap型のstaticなイベントとして、loopEndedForTileAnimationイベントが追加されました。
このイベントは、タイルアニメーションのフラグとしてLoopOnceをもっているタイルアニメーションのループが終わった時に、呼び出されます。イベントの引数として、
- アニメーションループが終わったTileを持つ対象のTilemap
- アニメーションが終了したタイルの位置の配列の
NativeArray<Vector3Int>
が渡ってきます。
公式ドキュメントからは読み取りにくいのですが、このイベントはTilemapクラスのstaticなイベントです。
GitHubのソースコードはこちら。
リリースノートの記載は次のとおりです。
- 2D: Added: Tilemap.loopEndedForTileAnimation callback when Animated Tiles have reached the end of their animation loop if it has the LoopOnce flag set.
Tilemap Palette Windowから、Tilemap GameObjectを作成可能に
Tilemap Palette Windowから、Grid GameObjectおよびTilemap GameObjectを作成可能になりました。
次の画像のように、Tile Palette WindowのActive Targetドロップダウンメニューで「Create New Tilemap」を選択し、Tilemapの種類を選択することで、Tilemapが作成できるようになりました。
また、Scene内にTilemapなどのGameObjectがないと、「To start painting in the Scene, first create new Tilemap.」というメッセージがTile Palette Windowに表示されるようになりました。これもナイス改善。
リリースノートにそれらしい記載は見つけられませんでした。もしかしたら、これかも?
- 2D: Added options to create WhiteBox Tile Palettes.
「マウスカーソルの位置を変更する」設定が追加
次の画像はUnity 2022.3において、「Isometric Z as Y map」なTilemapで、Z座標が5でTileを配置しようとしている図です。
マウスカーソルの位置に注目してください。配置しようとしているTileの位置ではなくて、「Tileを配置しようとしている座標のZ=0な座標」にカーソルがあります。Unity 2022.3まではこのように
Isometric Z as Y mapなTilemapにおいて、Z座標が0ではない座標にTileを配置しようとする
と、
「Tileを配置しようとしている座標のZ=0な座標」にマウスカーソルがありました。
Unity 2023.1からこの「マウスカーソルの位置」を変更できる設定が追加されました。Preferences Window > 2Dタブ > Tile Paletteタブの「Mouse Grid Position At Z」が新たに追加された設定です。
二つの画像のマウスカーソルの位置の違いに注目してださい。
「Mouse Grid Position At Z」有効 | 「Mouse Grid Position At Z」無効 |
---|---|
左「Mouse Grid Position At Z」を有効では、「Tileを配置しようとしている座標(位置)」にマウスカーソルがあります。
右「Mouse Grid Position At Z」が無効では、「Tileを配置しようとしている座標(位置)のZ=0の位置」にマウスカーソルがあります。
このように、好みの設定でマウスカーソルの位置をいじれるようになりました。
公式ドキュメントの「Effect of Mouse Grid Position At Z」の説明も参照してください。
リリースノートの記載は次のとおりです。
- 2D: Added preference option to Tile Palette Preferences for users to choose where they would want to position their mouse cursor when painting on Tilemaps with Z Position.
SpriteMaskのソースにTilemapRendererなどが指定できるように
今までSpriteMaskは、マスクのソースとして、Spriteのみを指定できました。
Unity 2023.1で新たに、ソースとしてSpriteRenderer, SpriteShapeRendererそしてTilemapRendererを指定できるようになりました。
リリースノートの記載は次のとおりです。
- 2D: Added Sprite/SpriteShape/TilemapRenderer as mask sources for SpriteMask.
2D Tilemap Extrasがバージョン4にアップデート
2D Tilemap Extrasパッケージ(com.unity.2d.tilemap.extras)のバージョンも、4にアップデートされました。
現在の最新バージョンは、4.0.1です。
アップデート内容としては以下の通りです。
- GameObjectBrush用のGameObjectBrushEditor型のshouldSaveBrushForSelectionの実装の追加
- 各種ブラシにRenderStaticPreviewの追加
- 各種ブラシにアイコンの追加
公式のCHANGELOGには、バージョン3.1で追加済み内容も4系のアップデート内容として含まれているようです。
各種パフォーマンスやユーザーエクスペリエンスの向上
リリースノートによると、次のようなパフォーマンス改善がされたようです。
- 2D: Improved the performance of creating a large number of Tile assets with the Tile Palette Window.
- 2D: Improved the performance of opening the Tile Palette Window when the Tile Palette references a large number of Tile assets. (UUM-26849)
- 2D: Improved the performance of TilemapRenderer when the user changes Material properties that does not require a BuildChunkJob. (UUM-53411)
- 2D: Improved the performance of creating a large number of Tile assets with the Tile Palette Window.
- 2D: Improved user experience for creating Tile Palettes.
まとめ
この投稿では、Unity 2023.1およびUnity 2023.2のTilemapのアップデート内容を紹介しました。
Unity 2023系はテックストリームバージョンとして「Unity 2023.3」もリリースが予定されています。Unity 2023.3、そして続くUnity 6でのTilemapの新機能も楽しみです。