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

Unity中LineRenderer私有/公有List显示差异问题咨询

问题原因分析

你的代码核心问题是**private List<Vector3> wayPointsPositions;没有初始化**:

  • 当把这个List设为public时,Unity的序列化系统会自动帮你实例化这个List(因为它会在Inspector面板中显示,Unity会为可序列化的public引用类型字段创建实例),所以wayPointsPositions.Add()能正常执行,后续设置LineRenderer的代码也能顺利跑完,线条自然正常显示。
  • 改成private后,如果你不在代码里手动用new List<Vector3>()初始化,这个变量就是null,调用Add()方法时会触发空引用异常,导致Start()方法里后续的lineRenderer.positionCount和lineRenderer.SetPositions()代码根本没执行,所以看不到线条。

修正方法很简单,声明时直接初始化:

private List<Vector3> wayPointsPositions = new List<Vector3>();
Unity中类似需要注意的情况
  • 序列化字段的自动实例化差异:
    • public字段或加了[SerializeField]标签的private字段,Unity序列化系统会自动实例化List、自定义类实例这类引用类型;但未标记的private引用类型不会被自动初始化,必须手动new。
  • Inspector面板的序列化影响:
    • 要是private字段需要在Inspector里编辑,必须加[SerializeField],否则Unity不会序列化它,也不会自动初始化。反过来,不想让public字段显示在Inspector的话,可以加[HideInInspector],但Unity依然会自动初始化它(因为它属于可序列化的public字段)。
  • 空引用异常的高频场景:
    • 组件引用:比如private LineRenderer lineRenderer;如果不在Start/Awake里用GetComponent获取,或者挂载脚本的对象上没有这个组件,就会变成null。(不过你这里已经正确获取了,所以没问题)
    • 资源引用:private的Texture、AudioClip等资源变量,要是不手动在Inspector拖入赋值或通过代码加载,也会是null;而public的可以直接在Inspector里拖入赋值。

内容的提问来源于stack exchange,提问作者keepupwiththetimes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:30:58