You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

首次使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 04:25:36