こちらのエディタ拡張について解説している動画のこの部分で
https://youtu.be/j4eMvdgXAHw?t=1442
SerializedPropertyとして宣言した overrideAttackMessageProp の値で
bool prevOverrideAttackMessage を初期化し、
その後二行後のif文内でこちらのプロパティをオフ(false)→オン(true)にした瞬間(エディタ内でチェックボックスにチェックを入れた瞬間)に何らかの処理をする
というコードがありますが、
C#
1 2 // public override void OnInspectorGUI()内の処理です 3 4 bool prevOverrideAttackMessage = overrideAttackMessageProp.boolValue; 5 EditorGUILayout.PropertyField(overrideAttackMessageProp, overrideAttackMessageLabel); 6 if (overrideAttackMessageProp.boolValue) 7 { 8 if (!prevOverrideAttackMessage) 9 { 10 // オフ → オンになった時に親の攻撃メッセージを取ってくる 11 attackMessageProp.stringValue = parent.AttackMessage; 12 } 13 14 // 上書きをするなら書き換え 15 EditorGUILayout.PropertyField(attackMessageProp, attackMessageLabel); 16 }
■OnInspectorGUI()が最初に呼ばれた時、
overrideAttackMessageProp.boolValue:false
prevOverrideAttackMessageがfalseで初期化される
■overrideAttackMessageProp.boolValue:trueになった時にOnInspectorGUI()が呼ばれた時
overrideAttackMessageProp.boolValue:true
bool prevOverrideAttackMessage = overrideAttackMessageProp.boolValue;
によって
prevOverrideAttackMessageもtrueになってしまうはずと考えました。
よって、prevOverrideAttackMessageの初期化の行が無視されなければ
C#
1 if (overrideAttackMessageProp.boolValue) 2 { 3 if (!prevOverrideAttackMessage) 4 { 5 //この中に入ることはできないのでは???????? 6 } 7 }
と思ったのですが、OnInspectorGUI()の中で変数の初期化が記述されている場合、
最初の呼び出し以降は無視される仕様となっているのでしょうか?
MonoBehaviour の Update() 内では変数の初期化は毎フレーム行われると思いますが、
こちらとどのような違いがあるために、このような挙動をするのでしょうか?
また、そもそも「初期化の一行が無視されている」という考えから間違っているのでしょうか?
こちらの動画投稿者さんが動画説明欄であげてくださっている全文ソースをこちらに引用させていただきます。
https://github.com/ina-amagami/ScriptableObject-Sample/blob/master/Assets/Scripts/Section4/Editor/BreedInspector.cs
こちらでは一部の抜粋のみの掲載で大変恐縮ですが、よろしければご教授いただけますよう何卒よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/25 16:05 編集
2021/09/25 16:32
2021/09/25 16:59 編集