Unity - 带有 Sets 和 Gets 的 NullReferenceException

Unity - NullReferenceException with Sets and Gets

我创建了一个 PlayerData 对象来存储我在其他脚本中需要的播放器的所有变量。我在访问器返回 bool 值时遇到问题,我不知道为什么它会给我这个错误。它不会给我设置 bool 的错误,但只会返回它,我不明白为什么因为对象是在 main class 中声明的。错误:

NullReferenceException: Object reference not set to an instance of an object.

主要CLASS

public class PersistentData : MonoBehaviour {
  public static PersistentData persistentData;
  public static PlayerData playerData;

  void Awake ()
  {
      if (persistentData == null)
      {
          DontDestroyOnLoad(gameObject);
          persistentData = this;
          playerData = gameObject.AddComponent<PlayerData>();
      } 
      else if (persistentData != this)
      {
          Destroy (gameObject);
      }
  }
}

玩家数据CLASS

public class PlayerData : MonoBehaviour {
  private bool isSliding;

  public bool IsSliding
  {
      get
      {
          return isSliding;
      }
      set
      {
          if (value == true || value == false)
          {
              isSliding = value;
          }
          else
          {
              isSliding = false;
          }
      }
  }
}

CLASS 调用对象

public class ActionClass : MonoBehaviour {
  void LateUpdate()
  {
      if (PersistentData.playerData.IsSliding)
      {
          //CODE SHOULD EXECUTE BUT GIVES NULLREFERENCE ERROR
      }
  }
}

您的问题是您的场景中没有包含 PersistentData class.

的对象

创建一个空对象并将 PersistentData.cs 分配给它,然后重试。

改进:

  • 您可以去掉 PlayerData.cs 中的 isSliding 并将 getter 和 setter 更改为:

    public bool IsSliding { get; set; }

  • 由于您正在为 PersistentData class 实现单例,我将从 PlayerDataActionClass 我会做:

    if (PersistentData.persistentData.playerData.IsSliding)
    {
    
    }
    

编码愉快!