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 实现单例,我将从 PlayerData
和 ActionClass
我会做:
if (PersistentData.persistentData.playerData.IsSliding)
{
}
编码愉快!
我创建了一个 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 实现单例,我将从PlayerData
和ActionClass
我会做:if (PersistentData.persistentData.playerData.IsSliding) { }
编码愉快!