Unity中无法获取GameObject网格:代码报错求助
问题修复方案
错误原因解析
- 第一个错误:你在
Start()方法里给局部变量加了private修饰符,这是C#语法错误——局部变量不能用private/public这类访问修饰符。另外,就算把platformMesh改成类的字段,也不能在字段初始化时直接引用platform(非静态字段),因为字段初始化的时机早于Unity的组件赋值流程,此时platform还没被赋值。 - 第二个错误:因为第一个语法错误导致编译器代码解析混乱,才会误报缺少闭合大括号。
修正后的代码
根据你的需求分两种情况:
情况1:platformMesh只在Start()方法内使用
public class ObjectSelector : MonoBehaviour { public GameObject platform; void Start() { // 去掉private,直接声明局部变量 Mesh platformMesh = platform.GetComponent<MeshFilter>().mesh; // 这里可以添加使用platformMesh的代码 } }
情况2:platformMesh需要在其他方法中使用(声明为类的字段)
public class ObjectSelector : MonoBehaviour { public GameObject platform; // 声明为类的私有字段,不在初始化时赋值 private Mesh platformMesh; void Start() { // 在Start里完成赋值,此时platform已经被Unity赋值 platformMesh = platform.GetComponent<MeshFilter>().mesh; } }
额外提示
建议加空值判断,避免platform未赋值或没有MeshFilter组件时报错:
void Start() { if (platform == null) { Debug.LogError("platform未赋值!"); return; } MeshFilter meshFilter = platform.GetComponent<MeshFilter>(); if (meshFilter == null) { Debug.LogError("platform上没有MeshFilter组件!"); return; } platformMesh = meshFilter.mesh; }
内容的提问来源于stack exchange,提问作者Samuel Bélanger
相关产品推荐
相关产品推荐

