Unity C#报Type or namespace definition类错误如何解决
报错原因
你遇到Type or namespace definition, or end of file expected报错是因为C#代码结构不符合语法规则,所有字段、方法都必须放在类的大括号内部,你的代码存在3处核心错误:
- 类声明和成员变量定义混淆:C#语法要求先定义类,所有变量、方法都要写在类的大括号范围内。你错误地把刚体成员变量的声明写在了类声明的位置,还额外加了一对空大括号,导致后面的力参数变量、
Update方法全暴露在类外部,编译器无法在命名空间层级直接解析字段、方法定义,就会抛出该错误。 - 类型名拼写错误:Unity内置的刚体组件类型名为
Rigidbody,你写成了RigidBody(第二个字母B大写属于拼写错误),会触发类型找不到的衍生错误。 - 刚体变量未初始化、缺少继承声明:直接调用未赋值的
rb变量会触发空引用异常,需要在脚本启动时获取当前挂载对象上的Rigidbody组件;另外Unity脚本需要继承MonoBehaviour才能正常挂载到游戏对象、自动调用生命周期方法。
修正后可运行代码
using System.Collections; using System.Collections.Generic; using UnityEngine; // 注意:类名必须和你保存的C#脚本文件名完全一致 public class PlayerController : MonoBehaviour { // 所有成员变量写在类的大括号内部 public Rigidbody rb; public float forwardForce = 2000f; public float sidewaysForce = 2000f; // 脚本启动时自动执行,获取刚体组件引用 void Start() { rb = GetComponent<Rigidbody>(); } void Update() { rb.AddForce(0, 0, forwardForce * Time.deltaTime); if (Input.GetKey("w")) { rb.AddForce(sidewaysForce * Time.deltaTime, 0, 0); } } }
提示:把代码挂载到游戏对象前,记得给对象添加Rigidbody组件,否则
GetComponent<Rigidbody>()会取到空值。
内容的提问来源于stack exchange,提问作者Unemployed Shrub
相关产品推荐
相关产品推荐

