書籍「作って学べる Unity本格入門[Unity 2021対応版]」(賀好昭仁著/技術評論社)から、Unity開発のエッセンスを学ぶ本連載。
今回はゲーム開発以外に使える、Unityの魅力的な機能を、書籍の中から一部抜粋して紹介する。
Unityの魅力的な機能をさらに知っておこう
本書で説明したゲーム開発以外にも、Unityにはたくさんの機能があります。ここでは、その一部を紹介しますので、興味を持ったものがあれば試してみてください。
XR
XRとは、VR(Virtual Reality、仮想現実)・AR(Augmented Reality、拡張現実)などを包括した用語です。UnityはXRにも対応しており、この分野でも大いに活用されています。
UnityでXRの開発を行う場合は、Package ManagerからXR Plugin Managementと各デバイスに対応したXR用プラグインをインストールします。あとはVRに対応したWindows PCとVRヘッドセットがあれば、Unityで開発したVRゲームをボタン1つでデバッグ実行することが可能です(2021年10月時点ではmacOSでのVR開 発は難しいため、注意が必要です)。
VRコンテンツはアトラクションや映像として楽しめる他、空間を気軽に作成・体験できることを活かし、さまざまな業務用途に利用されています。活用の幅はこれからもさらに広がっていくことでしょう。
ちなみに、ARゲームのポケモンGOはUnityで開発されています。仮想の世界に入って楽しむVRに比べ、現実の世界にプラスアルファの要素を加えるARの方が日常生活に組み込みやすいため、先に大きく成長するのはARだろうともいわれています。
Shader
Shaderは金属や木など、オブジェクトの質感を変えたり、オブジェクトを歪ませたりする際に使用します。普段はデフォルトのShaderやAssetに含まれるShaderを使うことが多いかと思いますが、自分で作成することも可能です。
Shader Graph
Shader Graphを利用すると、Shaderをグラフィカルに組み立てることができます。処理結果をリアルタイムで確認できるため、これからShaderを学ぶ場合はこれを活用することをオススメします。
Shaderを手書きする
Shader Graphを利用せず、Shaderを手書きすることも可能です。ShaderはHLSL言語の派生言語であるCgで書かれており、スクリプトで使うC#とは大きく異なるため、新たに学習が必要です(https://docs.unity3d.com/ja/current/Manual/SL-Reference.html)。
ちなみに筆者はごく簡単なShaderしか書いたことがありませんが、画像をスクロールさせるShaderを作って背景スクロールを楽に実装できたり、画像アニメーション用Shaderを作って負荷を抑えつつ、大量のSpriteをアニメーションさせたりと、結構役に立っています。
タイムライン
本書で作ったゲームは、ゲームオーバー画面で自動でタイトル画面に遷移させる処理など、時間の流れに沿った処理をスクリプトで実現しています。これを同様のことが行えるのがUnityのタイムライン機能です。
この機能を使用すれば、時間の流れに沿った処理をタイムライン上で組み立てることができます。
ゲーム中のイベントシーンや映像コンテンツを作成する場合は、タイムラインを使うと意図 通りの処理を組みやすくなるでしょう。また、シューティングゲームの敵キャラクターのように、時間経過に応じて一定の動きをするオブジェクトにも利用可能です。
ECS
ECS(Entity Component System)とは簡単にいうと、できるだけ負荷を抑えて、大量のオブ ジェクトを同時に扱えるようにするしくみです。
Unityで万単位のオブジェクトを動かす場合、通常のゲームオブジェクトでは負荷が高すぎてゲームとして用をなしませんが、このECSを利用するとゲームを滑らかに動作させることが可能になります。これだけを聞くと「それならば常にECSを使えばよいのでは?」と思うでしょうが、導入には以下のようなハードルがあります。
・通常のゲームオブジェクト(Mono Behaviour)とは別のしくみで動くため、設計変更やスクリプトの書き換えが必要になる
・現時点では実装がややこしくなる(2021年10月現在プレビュー版で、気の利いたメソッドが少ない)
ただし、ゲームオブジェクトを一括でEntityに変換してくれる機能など、Unityエディタ側でのECSサポートも徐々に充実してきていますので、今後に期待しましょう。
ECSを使って大量のオブジェクトが動いている様は圧巻で、かつ大量のオブジェクトが扱 えるとなるとゲームのアイデアも広がります。興味のある方は、公式サンプルプロジェクト を参考してください。
なお、ECSはDOTS(Data-Oriented Technology Stack)の機能の1つです。
ゲームをDOTSに対応すれば、パフォーマンスの大幅な向上が見込めることに加え、Unity Physicsという新しい物理エンジンも使用できるようになります。Unity Physicsは、高速でゲームが動作することに加え、物理演算を何回実行しても同じ結果が得られる(つまり物理挙動の事前予測ができる)ことが大きな特徴です。
コラム:Unityでゲーム以外を制作することはできるのか
筆者は以前からAndroidやiOSのネイティブアプリを開発していましたが、Unityでゲーム開発を行うようになってから、「Unityを使えばゲーム以外のアプリも簡単にマルチプラットフォーム対応できるのでは」と思いはじめました。
AndroidやiOSネイティブで開発する場合、プログラムやUIをそれぞれ作らないといけないため、実装の手間が二重にかかります。この手間をUnityで減らせないかと考えたわけです。結論からいうと、Unityで普通のアプリを制作することは「可能」です。ただし、以下のようなメリットとデメリットが存在します。
<メリット>
•マルチプラットフォーム対応
Unityはマルチプラットフォームに対応しているため、Android・iOSに向けたアプリを一気に制作することが可能です。
•リッチな表現がしやすい
ゲームエンジンという特性上、アニメーションや多種多様なエフェクトなど、リッチな表現や演出が実装しやすいです。
•UI作成ツールの使い勝手が良い
Android StudioやXcodeと比較すると、UnityのUI作成機能はシンプルで使いやすいです。細かな部分で多少苦慮しますが、UIの開発コストはいくぶん抑えられるはずです。
<デメリット>
•バッテリー消費の問題
ネイティブアプリは各OSに最適化されていますが、Unityはゲーム以外のアプリには不要な処理が含まれており、どうしても無駄が出てしまいます。特に顕著なのがフレームレートです。たとえばUnityでは、毎フレームUpdate()や描画系の処理が呼ばれますが、ネイティブアプリでは動きが少ないので、ほとんどの場合は無駄な処理となります。
そのため、ツール系アプリを常に高FPSで動かし続けていると、多くのバッテリーを消費してしまいます。バッテリーを少しでも節約したい場合は、アニメーションさせるときのみFPSを高くするなどの工夫が必要になってきます。
•Unityに無い機能を使うときに少し面倒
Unityはゲームのための機能が充実していますが、Android・iOSデバイスのカメラやBluetoothなど、各デバイスが持つすべての機能に対応しているわけではありません。そのような機能を使うためには、Android・iOSそれぞれのネイティブプラグインを準備す る必要があります。
また、ネイティブプラグインは各OSでしか動作しないため、エディタ上でデバッグ実 行する場合は、ダミーの処理も実装しないといけません。これらのことから、ゲームではないアプリをUnityで開発するかどうかは、作ろうとしているアプリの特徴を考慮しつつ 検討した方が良いでしょう。
マルチプラットフォーム対応の開発フレームワークは他にもFlutterやReact Nativeなどがありますので、それらを検討しても良いでしょう。
上記ではアプリに関してのメリット・デメリットを記載しましたが、Unityはゲームやアプリをリリースする以外の使い道もあります。たとえば、筆者は以前Unityで動画生成ツールを作成したことがあります。(そのツールは、現在も某YouTubeチャンネルで活躍しています。)他にも、Unityは想像力を形にするツールとしても使えますので、アイデア次第で用途は無限大にあります。
書籍情報
作って学べる Unity本格入門[Unity 2021対応版]好評発売中!
本書はUnityでゲーム開発を行いたい人を対象に、一つのゲームを制作する流れを通してUnity 2021の操作が学べる入門解説本。本書内で武器などを調達し、食べ物を求めながら冒険し、武器でモンスターと戦う3Dアクションゲームを制作していきます。
本格的なゲームを実際に制作しながらUnityの使い方を楽しみながら学び、実践的なテクニックも身に付けることができます。
>>詳しくはこちら