Oop Unity-NullReferenceException与集合和获取
我创建了一个Oop Unity-NullReferenceException与集合和获取,oop,unity3d,get,set,nullreferenceexception,Oop,Unity3d,Get,Set,Nullreferenceexception,我创建了一个PlayerData对象来存储播放器在其他脚本中需要的所有变量。我遇到访问器返回布尔值的问题,我不知道为什么它会给我这个错误。它不会给我设置bool的错误,只会返回bool,我不明白为什么,因为对象是在主类中声明的。错误: NullReferenceException:对象引用未设置为 反对 主类 public class PersistentData : MonoBehaviour { public static PersistentData persistentData;
PlayerData
对象来存储播放器在其他脚本中需要的所有变量。我遇到访问器返回布尔值的问题,我不知道为什么它会给我这个错误。它不会给我设置bool的错误,只会返回bool,我不明白为什么,因为对象是在主类中声明的。错误:
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 ActionClass : MonoBehaviour {
void LateUpdate()
{
if (PersistentData.playerData.IsSliding)
{
//CODE SHOULD EXECUTE BUT GIVES NULLREFERENCE ERROR
}
}
}
这里的问题是,场景中没有包含
PersistentData
类的对象
创建一个空对象并将PersistentData.cs分配给它,然后重试
改进:
- 您可以在PlayerData.cs中去掉
,并将getter和setter更改为:isSliding
public bool IsSliding{get;set;}
- 由于您正在为您的
类实现一个单例,因此我将从PersistentData
中删除PlayerData
关键字,并在static
中执行以下操作:ActionClass
if (PersistentData.persistentData.playerData.IsSliding) { }
快乐编码 @Draco18s的可能复制品在复制品中我不会着急。首先,您的链接与.NET相关,这是Unity,可能由于DontDestroyOnLoad而有所不同。检查问题发生的位置,不能是属性,更可能是playerData。我认为你有太多的静态案例和错误的命名(我的口味)。用实例替换persistentData,使其符合单例命名。然后使playerData非静态。最后,尝试PersistentData.Instance.playerData。让我们来看看我们要做什么。另外,基于IsSliding的实现,您可以将它简化为公共bool IsSliding{get;set;}@Everts Unity运行在.NET上(它可能是.NET 2.0,但仍然是.NET),重复的目标没有问题。唯一让Unity与众不同的是你如何获得你的对象引用,而不是当它们为空时该怎么做(或者如何诊断哪一个为空)。你是一个救命恩人!非常感谢。
if (PersistentData.persistentData.playerData.IsSliding)
{
}