我创建了一个PlayerData
对象,用于存储其他脚本中需要的播放器所有变量。我在访问器返回布尔值时遇到问题,我不知道为什么它会给我这个错误。它不会给我设置布尔值的错误,而只会返回它,而且我也看不出为什么,因为该对象是在主类中声明的。错误:
NullReferenceException:对象引用未设置为的实例 对象。
主要班级
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);
}
}
}
玩家数据类
public class PlayerData : MonoBehaviour {
private bool isSliding;
public bool IsSliding
{
get
{
return isSliding;
}
set
{
if (value == true || value == false)
{
isSliding = value;
}
else
{
isSliding = false;
}
}
}
}
可以调用对象的类
public class ActionClass : MonoBehaviour {
void LateUpdate()
{
if (PersistentData.playerData.IsSliding)
{
//CODE SHOULD EXECUTE BUT GIVES NULLREFERENCE ERROR
}
}
}
答案 0 :(得分:0)
您的问题是您的场景中没有包含PersistentData
类的对象。
创建一个空对象,然后将PersistentData.cs分配给它,然后重试。
改进:
您可以在PlayerData.cs中摆脱isSliding
并将其getter和setter更改为:
public bool IsSliding { get; set; }
由于您正在为PersistentData
类实现单例,因此我将从static
中删除PlayerData
关键字,并在ActionClass
中这样做:>
if (PersistentData.persistentData.playerData.IsSliding)
{
}
编码愉快!