(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

Odinを使ってシーン内を検証し、Inspectorでの設定に問題のあるオブジェクトを見つける【Unity】【アセット】


このエントリーをはてなブックマークに追加


この記事でのバージョン
Unity 2017.2.0f3


はじめに

以前にInspectorを圧倒的に使いやすくするOdinというアセットを紹介したのですが、




このOdin、Inspectorを使いやすくするだけでなく、なんとシーン内を検証し、

Inspectorでの設定に問題のあるオブジェクトを見つける事も出来るのです……!


f:id:kan_kikuchi:20180104073302j:plain


という事で今回はその方法についての記事です。


Scene Validator

シーン内を検証し、Inspectorでの設定に問題のあるオブジェクトを見つけるには

Scene Validatorを使います。


Sirenix - Odin Inspector : Design with Attributes


Scene Validatorを使うと以下のように、検証結果一覧を表示する事が出来ます。


f:id:kan_kikuchi:20180104073302j:plain


問題のある箇所をクリックすると、そのオブジェクトが強調されますし、

このWindowでそのまま修正する事も可能です。


f:id:kan_kikuchi:20180104074541g:plain


なお、開き方はTools -> Odin Inspector -> Scene Validatorを実行するだけ。


f:id:kan_kikuchi:20180104063254j:plain


検証内容の設定

次に具体的な検証内容の設定方法です。検証内容は属性で設定します。


Required

Requiredを付けると、Inspector上での設定(紐付け)を必須に出来ます。

設定していない場合はScene ValidatorやInspectorでエラーが表示されます。

//カメラ(Inspector上で設定する)
[Required]
public GameObject Camera = null;

f:id:kan_kikuchi:20180104064811j:plain
f:id:kan_kikuchi:20180104064804j:plain


なお、エラーの文言を変えたり、警告等に変更する事も出来ます。

//エラーの文言を変更
[Required("カメラがInspector上で設定されていません!")]
public GameObject Camera1 = null;

//エラーではなく警告に変更
[Required(InfoMessageType.Warning)]
public GameObject Camera2 = null;

f:id:kan_kikuchi:20180104065054j:plain
f:id:kan_kikuchi:20180104065045j:plain


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";
}

f:id:kan_kikuchi:20180104070301j:plain
f:id:kan_kikuchi:20180104070254j:plain


SceneObjectsOnly

SceneObjectsOnlyを付けると、

設定するオブジェクトをシーンに配置してあるオブジェクトに限定できます。

シーン外のオブジェクトを設定するとScene ValidatorやInspectorでエラーが表示されます。

//シーンにあるオブジェクトを設定する
[SceneObjectsOnly]
public GameObject SceneObject = null;

f:id:kan_kikuchi:20180104071213j:plain
f:id:kan_kikuchi:20180104071204j:plain


AssetsOnly

AssetsOnlyを付けると、設定するオブジェクトをProjectのアセットに限定できます。

SceneObjectsOnlyとは違い、

そもそもシーン内にあるオブジェクトは設定出来ません。(なのでエラーも出ません。)


f:id:kan_kikuchi:20180104072544g:plain


今回の趣旨とはちょっと違いますが、似た機能という事でついでに紹介してみました。


おわりに

ただ属性を追加出来るだけで有用だと思ってたOdinですが、

今回紹介した検証機能だけでも十分過ぎる効果を発揮します。

問題を発見出来るのは当然嬉しい事ですが、「問題がない」という事が確認出来るのも良いですよね!