Unity生成可通行网格时遇MonoBehaviour实例化错误求助
问题解决:Unity网格生成报错处理
错误根源
你遇到的报错核心原因是:你的Node类继承了MonoBehaviour,但代码里用new Node()直接实例化了它。Unity规定MonoBehaviour子类不能通过new创建,必须通过AddComponent()挂载到GameObject上,但你的网格节点根本不需要作为组件存在——它只是用来存储通行状态的数据容器。
修复步骤
修改Node类为普通C#类
找到你的Node类定义,删掉继承MonoBehaviour的部分,改成纯数据类:public class Node { public bool passable; // 可按需添加其他属性,比如网格坐标、世界坐标等 }保留原有网格逻辑
你原来的CheckPassableTerrain方法里的实例化代码grid[x,y] = new Node();现在可以正常执行,因为Node已经是普通类,不再受MonoBehaviour的创建限制。
额外说明
如果你的业务确实需要每个Node对应一个GameObject(比如可视化节点实体),那应该先创建GameObject,再通过AddComponent<Node>()添加组件,代码示例:
// 仅当需要实体节点时使用 GameObject nodeObj = new GameObject("Node_" + x + "_" + y); nodeObj.transform.position = worldPosition; Node node = nodeObj.AddComponent<Node>(); node.passable = passable; grid[x,y] = node;
但路径规划用的网格通常不需要实体对象,纯数据类的Node足够满足需求,还能提升性能。
内容的提问来源于stack exchange,提问作者NectarNoks
相关产品推荐
相关产品推荐

