(:3[kanのメモ帳]

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

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発したゲームです!


Inspectorに表示されている変数を条件に合わせて非表示にしたり、変更出来ないようにする【Unity】【Odin】


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

この記事でのバージョン
Unity 2021.1.16f1
Odin - Inspector and Serializer 3.0.9


はじめに

Unityでは変数をpublicにしたり、SerializeFieldという属性を付けると

Inspector上で値の確認及び変更が出来るようになりますが、

public int Value = 1;

[SerializeField]
private string _text = "てきすと";
f:id:kan_kikuchi:20210924135318j:plain


今回はOdinという言わずと知れた人気アセットを使って、

Odin - Inspector and Serializer | Utilities Tools | Unity Asset Store


これらのInspectorに表示されている変数を

条件に合わせて非表示にしたり、変更出来ないようにする方法の紹介です!

f:id:kan_kikuchi:20210924142647g:plain


ちなみに常に非表示にしたい場合はHideInInspector(Unityの属性)

常に変更出来ないようにするにはReadOnly(Odinの属性)を使います。

[HideInInspector]//常に非表示
public string Text = "テキスト";
[ReadOnly]//常に変更出来ないように
public bool Flag = true;]
f:id:kan_kikuchi:20210924143030j:plain



ShowIfとEnabledIf

さっそくですが、Inspectorに表示されている変数を

条件に合わせて非表示にしたい場合はShowIfという属性を使います。

なお("@true")のように@を付けた文字列で条件を指定する感じで、

@"_value == 1"のように他の変数や条件式を入れる事も可能です。

//↓のテキストをInspectorに表示するか
public bool ShouldShowText = true;
  
[ShowIf("@ShouldShowText")]//ShouldShowTextがtrueの時だけInspectorに表示
public string Text = "テキスト";
f:id:kan_kikuchi:20210924140222g:plain


次にInspectorに表示されている変数を

条件に合わせて変更出来ないようにしたい場合はEnableIfという属性を使います。

これもShowIfと同様に@を付けた文字列で条件を指定する感じです。

//↓のフラグをInspectorで有効にするための条件値
public float TermsValue = 1f;
  
[EnableIf("@TermsValue >= 0.5f")]//TermsValueが0.5以上の時だけInspectorで変更出来るように
public bool Flag = true;
f:id:kan_kikuchi:20210924142059g:plain