Unity 2018.3 の新機能

By Ikubaku, Tue 18 December 2018, in category Posts

games, programming, technical, Unity

これは KMCアドベントカレンダー2018の18日目の記事です!!

寒いですね!

こんにちは。ikubakuです。それにしても最近すごく寒いですね!年末で忙しい方も多いと思いますが、暖かくして過ごしてください。

今回は最近リリースされたUnity 2018.3の新機能で、個人的に気になったものを紹介していこうと思います。

Unity 2018.3リリース

Unityは、Unity Technologyが開発しているゲーム開発支援ツールおよびそのゲームエンジンです。市販のゲームを始め、個人や同人チームが制作したゲームで幅広く使われています。Unityは最近から(元から?)、年に3回ほど大きな更新が行われるようになっているようです。そのたびに開発を容易にしたり、ゲームを楽しく快適にする機能がどんどん追加されているようです。そんなわけで、つい最近リリースされたバージョン2018.3で追加された機能を見てみることにしました。(実は私も時々使うけれど、これまでほとんどアップデートの情報を見ていなかったことは秘密)

アップデートで気になったもの一覧

今回のアップデートでも、様々な変更や追加機能があったようです。全部紹介したいところですが、そんなことをすると私のMPが尽きてしまって年末頑張れないので、私が特に気になったものだけ紹介したいと思います。以下にそれらの項目を挙げます。

  • Physical Cameras

  • Project Tiny Preview

  • C# 7.3導入 / .NET 4.x APIがデフォルトに

  • GC Global Enable / Disable

  • Isometric Tile Maps

  • Prefabの機能更新

ではここからは、それらについて詳しかったり詳しくなかったりする解説をしていきます。

Physical Cameras

これは、UnityのCameraオブジェクトに対する機能追加です。これまでは言ってみれば、カメラワークができる抽象的なカメラ、でしかなかったのですが、今回のアップデートでレンズの焦点距離や、イメージセンササイズなどの物理的なパラメータが指定できるようになりました。これによって、レンズフレアなどの物理的な現象が再現できるようになるそうです。

Project Tiny Preview

Project Tinyは軽量なゲームを作るためのUnityのエディター及びエンジンのモードで、今の所簡単な2Dゲームやゲームができる広告(Google Doodleみたいなもの?)を作るのに使えるそうです。 Unityでの紹介サイトによれば、ゲーム自体のサイズは約2MBほどです。私もUnityでブラウザをターゲットにしたゲームを作成したことがありますが、それのサイズ(20MB)に比べればかなり小さいです。携帯端末で表示するWebページで使いたい時に便利になるかもしれません。この機能を使うには別途Package Managerから導入する必要があります。

C# 7.3導入 / .NET 4.x APIがデフォルトに

これまでのバージョンでは、(Unity Incremental Buildを試したりしていなければ)TupleやパターンマッチなどのC# 7以降の機能が利用できませんでした。しかし、2018.3では言語バージョンが7.3になったほか、.NET 4のAPIをデフォルトで使うようになりました(こちらはこれまでも指定できたらしい?)。これによってこれまで使えなかったデータ構造や記述方法が使えるほか、ビルドのパフォーマンスも向上するそうです。ちなみに、これらの機能を使う前に、Unity Tools for Visual Stuidoが依存している.NET Framework 4.7.x Target Packに対応する.NET Framework SDK 4.7.xを導入する必要があるようです(Visual Studio Installerで指定する必要あり)。

GC Global Enable / Disable

このバージョンからScripting APIに UnityEngine.Scripting.GarbageCollector が追加され、スクリプトからガベージコレクタの有効化・無効化を指定できるようになりました。これをうまく使えば、必要なアセットの読み込み後にGCを無効化してプレイ中のラグを減らすことができるかもしれません。(メモリリークには気をつけような!)

Isometric Tile Maps

前のUnity 2017では、Tile Mapsが導入され、マップチップを配置する要領で2Dゲームのレベルデザインが行えるようになりました。今回のバージョンではIsometric Mapが追加され、等角マップをデザインすることができるようになりました。等角マップというのは、世界を立方体とすると、それを斜め上の角から眺めたようなイメージで、ひし形のマップチップでレベルデザインを行う感じになります。これによって六角形のマップチップを用いるHexagonal Map(戦略系のゲームで使われることが多いだろうか)とはまた違う、立体感のあるステージを作ることができます。

Prefabの機能更新

Unity 2018.3ではPrefabの機能が大きく変わりました。今回参考にしているhttps://blogs.unity3d.com/jp/2018/12/13/introducing-unity-2018-3/[Unity Technologyのブログ]では、おもに次の3つの項目が取り上げられています。

  • Prefab Mode

  • Nested Prefabs

  • Prefab Variants

Prefab ModeはPrefabの属性、およびそのインスタンスの他のGame ObjectやPrefabインスタンスとの関係を、ヒエラルキービューから直接確認、または操作ができる機能です。Prefabのインスタンスにはヒレラルキービューに > が表示され、そこをクリックすると、ネストされているPrefab(後述)がヒエラルキービューに法事されると共に、インスペクタービューにそのインスタンスのもとのPrefabが表示されます。これによって、Prefabの構成の変更を以前より簡単に行うことができます。

Nested Prefabsとは任意の数のPrefabを子、または孫(?)として持つPrefabのことです。たとえばキャラクターのコアになるPrefabがあるとして、それに手足のPrefabを子Prefabとして追加する、というようなことができます。もちろん、子PrefabはそれだけでPrefabなのでそれ自体をインスタンス化できますし、そのPrefabを編集すれば、すべての子Prefabが変更されます…​…​

え?前もできたじゃんって?はい、たしかに以前も「あるPrefabのインスタンスを子オブジェクトに持つGame ObjectのPrefab」というものは作ることができて、子オブジェクトのもとのPrefabをいじれば、変更をそれにも適用できました。でも、Prefabをインスペクタービューなどで見ただけではわかりにくかったですよね?Unity 2018.3では、そのようなGame ObjectをPrefabにすると、Nested Prefabとして扱われ、インスタンスをPrefab Modeで開いたときにヒエラルキービューでPrefabがどんなふうに階層構造になっているかを確認したり、その構造を変更したりすることができます。

最後に、Prefab Variantsを紹介します。Prefab Variantsとは、「あるPrefabをベースとして作ったPrefab」のことです。クラスの概念のある言語に触れたことがある人はクラスの継承をイメージしていただければわかりやすいでしょうか。Prefab VariantはあるPrefabのインスタンスをいじったものをPrefab化する際に「Prefab Variantにする」を選ぶことで作ることができます。この機能の強力なところは、「ベースのPrefabに加えた変更が、それから派生したPrefabにも適用される」という点です。例えば、2Dアクションゲームで左右に歩き回る敵キャラクターを実装して、その敵キャラクターの亜種として、槍を振り回しながら歩き回るものもそれをベースに作ったとします。しかし、あとでこの敵キャラクター全体に変更を加えたいとなった場合、どうしたら良いでしょうか。各キャラクターが別々のPrefabとして実装されてしまっていたら場合によっては収拾がつかなくなります。このような場合でも元になる敵キャラクターをベースに、「Prefab Variantsとして」亜種のキャラクターを作っておけば心配は無用です。ベースのPrefabを変更すれば、それだけですべての亜種にも変更を加えることができるからです。このようにPrefab Variantsは様々なキャラクターやアイテムなどを用いたゲームを作りたいときに大変心強い機能になるでしょう。(ちなみに"variant"は「亜種」という意味があったりします)

おわりに

これまで使っているアプリケーションのアップデート情報が流れていても、しっかり読んだことがなかったのですが、Unity 2018.3のアップデートがすごかったからなのか、見ていて非常に面白いと感じました。これからは、アップデート情報が来たら、少しは読むようにしようと思います。

この記事では文章ベースでの紹介記事になってしまい、イメージが尽きづらかったかもしれません。後日気が向いたら、Prefabの新機能の練習用に使ったプロジェクトをGitHubにあげようと思っているので、そのあたりで新しい情報がありましたら、この記事を更新していこうと思います。また、ここで紹介した以外にも多くの変更があったようです(特に3Dゲームに関わるところはここでは紹介していない)。ぜひ、ソースのブログも参照してみてください。

以上、KMCアドベントカレンダーの私の記事でした。次はhatsusatoさんの「理想のスライドツールの考察」です。ぜひ見てみてください。

参考