はじめに
UnityでPublic変数を定義したクラスを作成し、オブジェクトにアタッチしました。その後、変数の値をスクリプト側から変更しても値が変化しない、という現象があります。
昨日投稿した記事でも気づくまで時間がかかったので、今一度原因と対処法を書き残しておきます。
変数の値が変更できない現象の再現
- Public変数を定義したクラスを作成する。
DetectSwipe.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SwipeDetector : MonoBehaviour
{
public bool detectSwipeOnlyAfterRelease = false;
...
}
-
このクラスをオブジェクトにアタッチする。
-
スクリプトでPublic変数の値を変更する。
DetectSwipe.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SwipeDetector : MonoBehaviour
{
- public bool detectSwipeOnlyAfterRelease = false;
+ public bool detectSwipeOnlyAfterRelease = true;
...
}
- 実行すると、変更した値が反映されていない。
原因と対処
スクリプトをオブジェクトにアタッチすると、Public変数はインスペクターから変更できるようになります。
スクリプトの値を変更しても、このインスペクタ上の値を変更しないと値が変わりません。
対処法
今回の場合もそうですが、他から参照されなかったり、インスペクタから値を編集する必要がない場合はprivate変数にするほうがよさそうですね。
DetectSwipe.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SwipeDetector : MonoBehaviour
{
- public bool detectSwipeOnlyAfterRelease = false;
+ private bool detectSwipeOnlyAfterRelease = false; // これでも問題がない
...
}