Unity Editor

Unity Editor

Unity Editor

UnityもUnity Editorも多機能です。Unityを始める人はプログラミング経験もさまざまでしょう。Unity EditorはUnityアプリを作るのに便利な機能が色々あります。Unity公式サイトにはマニュアルとスクリプトリファレンスがありますが、その間のC#Script視点でUnity Editorの概要を説明しているページが見当たりませんでした。

A. Toolbar

Scene viewの操作や再生ボタン等があります。再生ボタンを2度押すと再生が終了します。

再生前の状態は、シーンの開始の状態を表しています。シーンの開始時にあるGameObjectはすでにインスタンス化されているように見えます。GameObjectにアタッチ(Component登録)されているComponentのプロパティの値を変更できます。これはC#Scriptに反映されるのではなく、コンストラクタ実行後にインスタンスに対して設定される値です。

再生すると実行中のGameObjectが見れます。関連するプロパティも見れます。値の設定もできますが、それは値を調整して試すためのものであり、再生を終了すると一部の例外をのぞき再生前のシーン開始時の値に戻ります。

B. Hierarchy window

アクティブなSceneにあるGameObjectインスタンスのnameを階層的に表示しています。

このnameはGameObjectの基底クラスであるUnityEngine.Objectクラスのnameです。C#Scriptから生成したGameObjectもnameを設定することで再生中にインスタンスを区別することができます。

カメラもライトもここではGameObjectです。カメラGameObjectにはCameraコンポーネントがアタッチ(Component登録)されています。ライトGameObjectにはLightコンポーネントがアタッチされています。

Unity Editorではアイコンがさまざまな種類を表しています。アイコンの種類が違うと異なる性質を持つので、アイコンの違いは重要です。

次のC#ScriptをScene上のGameObjectにアタッチするとHierarchyと同じようにGameObjectの名前を表示します。Project上のC#Scriptの名前はクラス名と同じにする必要があります。アタッチとは関連付けることです。この場合はC#ScriptをGameObjectのコンポーネントに登録することです。Unity Editor上ではアタッチをドラッグ&ドロップ等のGUI操作でできます。

using System;
using UnityEngine;
using UnityEngine.SceneManagement;

public class ShowHierarchy : MonoBehaviour
{
    void ShowTree(int depth, GameObject obj)
    {
        Debug.Log(new String(' ', depth) + obj.name);
        if (obj.transform.childCount > 0)
        {
            for (int i = 0; i < obj.transform.childCount; ++i)
            {
                ShowTree(depth+1, obj.transform.GetChild(i).gameObject);
            }
        }
    }
    void Start()
    {
        Scene scene = SceneManager.GetActiveScene();
        Debug.Log(scene.name);
        GameObject[] gameObjects = scene.GetRootGameObjects();
        foreach (var obj in gameObjects)
        {
            ShowTree(1, obj);
        }
    }
}

C. Game view

SceneのCameraを通して描画されたviewです。アプリ上で受け付けるInputを受け付けます。

D. Scene view

Scene上のGameObjectを視覚的に編集できるviewです。Main CameraはCamera Componentを持つGameObject、Directional LightはLight Componentを持つGameObjectです。衝突判定のための形状も視覚的に見ることができます。

E. Inspector window

Unity Editor上で選択しているものの中を見たり編集できるようにしたwindowです。

GameObjectインスタンスが選択されている場合、GUI上でフィールドの値を変更できます。GameObjectに登録されているComponentのプロパティも変更できます。MonoBehaviourの基底クラスにはComponentクラスがあります。MonoBehaviourから継承したC#ScriptはGameObjectにComponent登録できます。MonoBehaviourから継承していないC#ScriptはComponentではないためGameObjectにComponent登録できません

C#Scriptが選択されている場合、コードが見れます。

F. Project window

Projectのフォルダー/ファイル構成です。

C#Scriptのファイル名とクラス名は同じにしましょう

UnityではC#Scriptのファイル名とクラス名が異なる場合GameObjectにアタッチできません。

コンテキストメニューによりC#Scriptを生成できます。生成直後にC#Scriptのファイル名を入力すると、ファイル名と同じクラス名のファイルができます。ファイル名決定後に名前を変更するとクラス名には反映されません。Visual Studio等でクラス名をファイル名と同じ名前に変更する必要があります。

フォルダ名も意味を持つ場合があります

フォルダ名に意味を持つ場合があります。例えば、Unity Editorは拡張ができますが、拡張に使ったC#Scriptは”Editor”フォルダの下に置く決まりになっています。再生中は問題なく動きますが、Platform用にBuildするとUnity.Editorが参照できないためエラーになります。Platform用のBuildではEditorフォルダの下のC#ScriptはBuild対象外になります。

フォルダ名の規則はUnity Editorのバージョンにより異なることがあります。

G. Status bar

通知が表示されたり、ツールや設定へのクイックアクセスアイコンがあります。

H. Console window

警告、エラー、その他のメッセージを表示します。

ビルドエラー等Unity Editorから自動的に出力しているものもありますが、C#ScriptでDebug.Log()を使った時にもこのwindowに表示されます。

C#Scriptのデバッグで一番お手軽なのがDebug.Log()を使った方法です。ソースコードのどの場所からDebug.Log()が呼ばれたかもわかります。表示の仕方もGUI上で選択できます。

EditorWindow

EditorWindowを継承したC#Scriptを作成することでUnity Editor上にカスタムウィンドウを作成できます。

エディターウィンドウ - Unity マニュアル
アプリケーション内でカスタムウィンドウをいくつでも作ることができます。カスタムウィンドウもインスペクター、シーン、その他のビルトインウィンドウと同じように機能します。カスタムウィンドウは、ゲームのサブシステムにユーザーインターフェースを追加するのにぴったりの方法です。

コメント