UnityのPublic変数の初期値が変更されない

November 02, 2021

はじめに

UnityでPublic変数を定義したクラスを作成し、オブジェクトにアタッチしました。その後、変数の値をスクリプト側から変更しても値が変化しない、という現象があります。

昨日投稿した記事でも気づくまで時間がかかったので、今一度原因と対処法を書き残しておきます。

変数の値が変更できない現象の再現

  1. Public変数を定義したクラスを作成する。
DetectSwipe.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SwipeDetector : MonoBehaviour
{
    public bool detectSwipeOnlyAfterRelease = false;

		...
}
  1. このクラスをオブジェクトにアタッチする。

  2. スクリプトでPublic変数の値を変更する。

DetectSwipe.cs
  using System.Collections;
  using System.Collections.Generic;
  using UnityEngine;
  
  public class SwipeDetector : MonoBehaviour
  {
-     public bool detectSwipeOnlyAfterRelease = false;
+     public bool detectSwipeOnlyAfterRelease = true;
  
  		...
  }
  1. 実行すると、変更した値が反映されていない。

原因と対処

スクリプトをオブジェクトにアタッチすると、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;  // これでも問題がない
  
  		...
  }

プロフィール画像

nabehide Software Developer, Tokyo Japan @____nabehide