ゲーム開発をスピードアップさせるUnityのカスタムエディターとは
現在ゲーム開発において、UnrealEngineと人気を二分する「Unity」では、エディターを柔軟にカスタマイズすることができます。必要な機能だけを表示するようにしたり、各種設定を簡単に操作できるようにするなど、ゲーム開発のスピードアップに有効です。
今回の記事では、Unityエディターのカスタマイズについて、概略と使用場面をできるだけわかりやすくまとめていきます。
この記事でわかること
・Unityのカスタムエディターについて
・カスタムエディターの作成方法
・カスタムエディターの活用について
Unityのカスタムエディターとは
本記事では、一般の方にもわかりやすいことを前提として記述していますので、部分的に用語の解説などを交えながら、進めていきましょう。
◯Unityとは
現在ゲーム開発において、UnityやUnrealEngineといったゲームエンジンが使われることが主流となっています。
ゲームエンジンとは、ゲーム開発用に作られた統合開発環境のことを言います。多くのゲームで共通して使われる機能やグラフィック処理などを標準で準備することで、開発にかかる手間を削減することができます。
その分、ゲームの品質に注力できるため、優れたゲームを作成できるようになります。
前述した2つの代表的なゲームエンジンを比較した場合、Unityは汎用性が高く幅広い開発に利用されており、特に携帯ゲームなどで多く用いられています。
一方のUnrealEngineは優れたグラフィック表現が可能で、高精細で本格的なゲーム開発用として好まれているという特徴があります。*注1
◯Unityのエディターとは
Unityエディターとは、アプリケーションとしてのUnityそのものです。Unityエディターはいくつかのウインドウやビューで構成されており、それぞれが特有の機能を持っています。
◯Unityエディターの6つのメインウインドウ
・プロジェクトウインドウ(アセット管理)
3Dモデル、アニメーション、テクスチャなどのバイナリファイルやUnityスクリプトのファイル(クラス)などのアセットを管理するウインドウ
・シーンビュー(ゲーム上の3D空間の表示)
・ヒエラルキーウインドウ(ゲームオブジェクトを文字で表示)
・インスペクタ(ゲームオブジェクトの属性を表示)
・ツールバー(ツール類を選択するためのバー)
・ゲームビュー(カメラコンポーネントが最終的に描画した3D空間を表示)
ゲーム開発では、3D空間内に必要となるゲームオブジェクトを配置します。戦車や戦士などを想像するとわかりやすいでしょう。
それぞれのオブジェクトにゲーム内での動きや役割を持たせるため、さまざまな特徴を付加していきます。これはスクリプトと呼ばれるプログラムで記述しますが、位置情報などを含めたさまざまな属性は、標準で準備されているものを利用できます。
これらの属性はインスペクタと呼ばれるウインドウに表示されますが、デフォルトの状態だと、あまり必要のないものまで表示されるため、やや使いにくい状態だったりします。 属性の値を変更する場合、スライダーであれば簡単に設定できるのに、数値入力しかできないため視覚的な設定ができない場合などがあります。
ゲームの設計をする際、細かく数値を調整しながら開発をすることも多く、このような部分については必要なものだけを使いやすい形で表示できればとても便利です。
これを実現するのが、カスタムエディターです。
Unityのマニュアルでは、カスタムエディターについて
「カスタムエディターは、デフォルトレイアウトの 代わりに 任意のエディター制御を表示できるようにする、追加のスクリプトです。」
と説明されています。*注2
Unityカスタムエディターの作成
では実際に、Unityでカスタムエディターを作成してみましょう。
Unityを起動し、ゲームオブジェクトとして「cube」を置きます。この「cube」をゲーム内のキャラクターとみなして、攻撃力を設定してみましょう。
攻撃力はこの「cube」が持っている元々のレベルと、武器、ラッキーポイントの3つの要素から計算することとします。
まずは「攻撃力=(レベル+武器)*ラッキーポイント」としてみましょう。
それぞれの要素として
・攻撃力・・・AttackPWR
・レベル・・・BaseLevel
・武器・・・ArmsPWR
・ラッキーポイント・・・LuckyPoint
とします。
ラッキーポイントは攻撃時点にランダムに決まるようにすれば、「偶然の一撃」で相手を倒すという演出になりそうです。
ここでは、とりあえず手動で設定することとします。
「cube」を選択した状態で、”Add compornent”から”New Script”を選びます。
スクリプト名を”CubeMan”として以下のコードを記述します。
using UnityEngine;
[ExecuteInEditMode]
public class CubeMan : MonoBehaviour
{
[Range (0, 99)]
public int BaseLevel;
[Range (0, 99)]
public int ArmsPWR;
[Range (0, 9)]
public int LuckyPoint;
public int AttackPWR {
get {
return (BaseLevel + ArmsPWR)*LuckyPoint ;
}
}
}
これで、インスペクターを確認するとレベル・武器・ラッキーポイントが、スライダーで設定できるよう表示されます。
デフォルトでは、それぞれの数値は0ですが、スライダーで簡単に数値を入力できますので、開発段階でキャラクターの強さやゲームバランスを調整することが簡単になります。
しかし、この状態では肝心の攻撃力がいくつになるのか一目ではわかりません。できれば計算した結果も、インスペクター上で確認できるようにしたいものです。
Unityでは、シリアライズできるものはこのように表示されますが、それ以外は自分で表示の設定をしなくてはいけません。ここで、カスタムエディターの出番になります。
Editorクラスの派生クラスを作成、cubeコンポーネントに対してCustomEditor属性を付加します。インスペクターのGUIは、OnInspectorGUI をオーバーライドすることで実装します。
using UnityEngine;
using UnityEditor;
[CustomEditor (typeof(CubeMan))]
public class CubeManInspector : Editor
{
CubeMan cubeman = null;
void OnEnable ()
{
cubeman = (CubeMan) target;
}
public override void OnInspectorGUI ()
{
base.OnInspectorGUI ();
EditorGUILayout.LabelField ("攻撃力", cubeman.AttackPWR.ToString ());
}
}
ここで改めてインスペクターを確認してみると、
このように、計算結果が攻撃力として表示されるようになりました。
カスタムエディターを活用することで、開発段階で必要となる情報を効率よく視認することができるようになる一つの例です。
カスタムエディターの活用
カスタムエディターを使えば、上記でご紹介した以外にもさまざまな場面で、開発に役立つようカスタマイズすることができるようになります。
・変数のテキストフィールドを追加
・テキストフィールドを複数行入力可能にする
・変数のスライダーを追加する
・コンテキストメニューを追加する
・ボタンを追加する
・トグルやヘルプボックスを表示する
上記のように、柔軟な設計ができます。
ゲーム開発における作業の効率化、視認性の向上によるミスの防止や、ゲーム性の設定段階での試行錯誤のしやすさなど、多くの利点があります。
Unityが開発者に選ばれるのは、このようなGUIの柔軟さも一つの理由となっています。*注3
【まとめ】
Unityのエディターは自由にカスタマイズすることで、格段に使いやすくなります。
また開発に慣れてきたら、「こんな表示があればいいのに」「ここは必要な情報だけ表示したい」などの要望が出でてきます。
そんな時に少しの手間をかけてでも、カスタムエディターを作成することによって、トータルでの開発スピードをアップすることができます。ぜひ、試してみてください。
建設・土木業界向け 5分でわかるCAD・BIM・CIMの ホワイトペーパー配布中!
CAD・BIM・CIMの
❶データ活用方法
❷主要ソフトウェア
❸カスタマイズ
❹プログラミング
についてまとめたホワイトペーパーを配布中
デジタルツインと i-Constructionについての ホワイトペーパー配布中!
❶デジタルツインの定義
❷デジタルツインが建設業界にもたらすもの
❸i-Constructionの概要
❹i-Constructionのトップランナー施策
▼キャパの公式Twitter・FacebookではITに関する情報を随時更新しています!
■参考文献
注1
IT Media News 「ゲームエンジン」はいかに世界を変えつつあるのか
https://www.itmedia.co.jp/news/articles/2010/22/news033.html
注2 Unity マニュアル
https://docs.unity3d.com/ja/2018.4/Manual/editor-CustomEditors.html
注3
【XR-HUB Unity】エディタ拡張でエディタを自由にカスタマイズしよう!~インスペクタビュー編~
https://xr-hub.com/archives/16957
※記事内の画像、コードは実際にUnityで製作したものになります。