首次使用C#复制Unity代码遇错误:Non nullable field must contain a non-null value
问题原因
你遇到的错误是因为C# 8.0及以上的可空引用类型特性,Unity现在默认开启了这个检查。GameObject是引用类型,你的私有静态字段Load声明时没有初始化,编译器认为它可能始终为null,违反了非空字段的要求——即使你在Init方法里会给它赋值,编译器无法确保Init一定会被先调用。
解决方法
给你三种可行的解决方式,推荐第一种:
方法一:声明字段为可空引用类型
在GameObject后面加?,明确告诉编译器这个字段可以为null,后续通过Init给它赋值即可:using System; using UnityEngine; namespace Trainer7dtd { public class Loader { public static void Init() { Load = new GameObject(); UnityEngine.Object.DontDestroyOnLoad(Load); } private static GameObject? Load; } }方法二:声明时直接初始化字段
如果逻辑允许,可以在声明字段时直接创建GameObject,这样编译器就不会认为它会为空:private static GameObject Load = new GameObject();不过这种方式会在类加载时就创建对象,可能不符合你想通过
Init控制创建时机的需求。方法三:关闭可空引用类型检查
在Unity项目的Assembly-CSharp.csproj文件中,找到<Nullable>enable</Nullable>并改成<Nullable>disable</Nullable>。但不推荐这种做法,因为可空引用类型能帮你提前避免很多空引用异常,是C#的重要特性,建议新手适应它。
内容的提问来源于stack exchange,提问作者chickenzzx
相关产品推荐
相关产品推荐

