首页 > 解决方案 > 除了作为访问修饰符和序列化字段之外,“公共”的统一功能是什么?

问题描述

我参考了这个视频教程并尝试了代码https://www.youtube.com/watch?v=rQyUACEyAVw&t=70s。请注意此代码public List<GameObject> Onbelt;,如果我不将“public”一词放在前面,则永远不会分配统一警告字段,并且始终将其默认值设为 null。当我运行它时它崩溃返回一个空引用异常错误。那么publicinpublic List<GameObject> Onbelt;初始化并统一创建 List 的新实例?List<GameObject> Onbelt;=new List<GameObject>()因为即使没有? 如果将 public 这个词放在前面,它也不会抛出任何错误。

标签: c#unity3d

解决方案


不,在这种情况下,访问修饰符与变量初始化无关。

仅在公开时才显示警告的事实是由于如果您有公共字段(或 SerializedOne),则可以由编辑器分配它,但如果它是私有的,则不能,因此引擎会发出警告你关于默认值。

如果您将列表设为私有,但您将变量初始化为:

private List<GameObject> Onbelt = null;

或者

private List<GameObject> Onbelt = new List<GameObject>();

警告将消失,因为您正在强制使用默认值。

编辑:

需要明确的是,在 c# 中访问修饰符与变量初始化无关,但在 UNITY EDITOR 中,拥有一个公共变量,让用户填写此列表,因此默认情况下,使用 new List() 而不是默认 null 创建.

所以这不起作用(NullReferenceException):

private List<int> list;

void Start()
{
    list.Add(2);
}

但这将起作用:

public List<int> list;

void Start()
{
    list.Add(2);
}

推荐阅读