类型"游戏对象"必须是不可为空的值类型



我试图在Unity 3D中序列化一些变量INetworkSerializable,所以我使用一个包含变量和函数来序列化它们的结构体,这是我的代码:

public struct MyStruct : INetworkSerializable{
public static GameObject OBJ1 = GameObject.Find("Obj1");
public static GameObject OBJ2 = GameObject.Find("Obj2");
public static GameObject OBJ3 = GameObject.Find("Obj3");
public void NetworkSerialize<T>(BufferSerializer<T> serializer) where T : IReaderWriter
{serializer.SerializeValue(ref OBJ1);serializer.SerializeValue(ref OBJ2);serializer.SerializeValue(ref OBJ3);}}

然后,在start函数中,我删除所有游戏对象,除了我想要的名称存储在变量

中的对象
string DoNotDelete = PlayerPrefs.GetString("ActiveObj");
MyStruct Struct = new MyStruct();
{if (Struct.OBJ1.name != DoNotDelete)
{DestroyServerRpc(Struct.OBJ1);}}

然而,我得到一个错误说:

类型"GameObject"必须是一个非空值类型,以及任何嵌套级别的所有字段,以便将其用作泛型类型或方法"BufferSerializer<T>.SerializeValue<T>(ref T, FastBufferWriter.ForPrimitives)"中的参数"T">

我在第29行得到这个错误这是NetworkSerialize<T>函数内的行

我不明白:结构上的变量不应该是不可空的?

请注意,我还在学习编码,我不完全理解结构体,不可空值和类似的东西是如何工作的

有人可以解释我如何设置这些变量为非空,也许如果你是勇敢的,如何结构和非空的工作?我已经读了文档,但我看不懂。谢谢你的回答

我也有过类似的错误(游戏邦注:"GameObject"类型必须是一个非空值类型,以及任何嵌套级别的所有字段,为了在通用类型或方法"ForceNetworkSerializeByMemcpy"中使用它作为参数"T",我在unity (https://forum.unity.com/threads/non-nullable-values-in-networkvariable.1212075/)上找到了这个表单,它讨论了它如何需要成为一个非空变量,因为你可以将游戏对象设置为空,所以你需要使它不能将游戏对象设置为空。然后我在GitHub上发现了这个令人困惑的线程,他们谈论了转换和游戏对象之间有趣的功能冲突,你可以阅读,因为我在解释事情(https://github.com/JetBrains/resharper-unity/issues/1503)。所以简而言之,你需要使游戏对象不可空,我不知道怎么做,我说的一切都可能是错误的,因为我不知道我在说什么,这就是为什么我包括资源,所以我希望这有助于告诉我,如果你找到一个解决方案,因为我没有找到一个

最新更新