この記事でのバージョン
Unity 2017.2.0f3
はじめに
以前にInspectorを圧倒的に使いやすくするOdinというアセットを紹介したのですが、
Odin - Inspector and Serializer - Asset Store |
このOdin、Inspectorを使いやすくするだけでなく、なんとシーン内を検証し、
Inspectorでの設定に問題のあるオブジェクトを見つける事も出来るのです……!
という事で今回はその方法についての記事です。
Scene Validator
シーン内を検証し、Inspectorでの設定に問題のあるオブジェクトを見つけるには
Scene Validatorを使います。
Tutorials | Learn how to improve your workflow in Unity using Odin Inspector
Scene Validatorを使うと以下のように、検証結果一覧を表示する事が出来ます。
問題のある箇所をクリックすると、そのオブジェクトが強調されますし、
このWindowでそのまま修正する事も可能です。
なお、開き方はTools -> Odin Inspector -> Scene Validatorを実行するだけ。
検証内容の設定
次に具体的な検証内容の設定方法です。検証内容は属性で設定します。
Required
Requiredを付けると、Inspector上での設定(紐付け)を必須に出来ます。
設定していない場合はScene ValidatorやInspectorでエラーが表示されます。
//カメラ(Inspector上で設定する) [Required] public GameObject Camera = null;
なお、エラーの文言を変えたり、警告等に変更する事も出来ます。
//エラーの文言を変更 [Required("カメラがInspector上で設定されていません!")] public GameObject Camera1 = null; //エラーではなく警告に変更 [Required(InfoMessageType.Warning)] public GameObject Camera2 = null;
ValidateInput
ValidateInputを付けると、Inspector上で設定した値を検証出来ます。
検証でおかしな結果になる場合はScene ValidatorやInspectorでエラーが表示されます。
なお、検証は以下のように第1引数で指定したメソッドで行います。
//カメラ(MainCameraのTagが付いたオブジェクトを設定する) //第1引数 : 検証用のメソッド名, 第2引数 : エラーメッセージ, 第3引数 : メッセージの種類 [ValidateInput("IsMainCameraTag", "MainCameraのTagが付いたオブジェクトを設定してください!", InfoMessageType.Error)] public GameObject Camera; //検証用のメソッド、入力が設定したい変数の型、返り値がbool(入力されたGameObjectのTagがMainCameraどうか) private bool IsMainCameraTag(GameObject target){ return target.tag == "MainCamera"; }
SceneObjectsOnly
SceneObjectsOnlyを付けると、
設定するオブジェクトをシーンに配置してあるオブジェクトに限定できます。
シーン外のオブジェクトを設定するとScene ValidatorやInspectorでエラーが表示されます。
//シーンにあるオブジェクトを設定する [SceneObjectsOnly] public GameObject SceneObject = null;
AssetsOnly
AssetsOnlyを付けると、設定するオブジェクトをProjectのアセットに限定できます。
SceneObjectsOnlyとは違い、
そもそもシーン内にあるオブジェクトは設定出来ません。(なのでエラーも出ません。)
今回の趣旨とはちょっと違いますが、似た機能という事でついでに紹介してみました。
おわりに
ただ属性を追加出来るだけで有用だと思ってたOdinですが、
今回紹介した検証機能だけでも十分過ぎる効果を発揮します。
問題を発見出来るのは当然嬉しい事ですが、「問題がない」という事が確認出来るのも良いですよね!
Odin - Inspector and Serializer - Asset Store |