我正在使用Unity学习2D游戏开发,而我刚刚开始编程和游戏开发。我遇到了错误:CS1022类型或命名空间定义,或生命周期结束预期这里是我写的代码:
'
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
{public class Player : MonoBehaviour
public Rigidbody2D rb;
public int movespeed;
// Start is called before the first frame update
void Start() {
rb = GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update() {
if (Input.GetKey(KeyCode.LeftArrow))
{
rb.velocity = new Vector2 (-movespeed, rb.velocity.y);
}
if (Input.GetKey(KeyCode.RightArrow))
{
rb.velocity = new Vector2 (movespeed, rb.velocity.y);
}
if (Input.GetKey(KeyCode.Space))
{
rb.velocity = new Vector2 (rb.velocity.x, 5);
}
public Transform groundCheck;
public float groundCheckRadius;
public LayerMask whatIsGround;
public bool onGround;
void FixedUpdate()
{
onGround = Physics2D.OverlapCircle(groundCheck.position,
groundCheckRadius,whatIsGround);
}
}
}
'我试图控制我的游戏角色的跳跃能力,使它不能通过跳跃飞行。
它说错误是在行(39,1).我不知道如何修复这个错误有人能帮助和解释我做错了什么吗?
我不知道该怎么做,因为我已经完全按照书中我用来学习编码说,我已经尝试rearranging的代码,但无济于事。
2条答案
按热度按时间rta7y2nd1#
编程中最有用的技巧之一就是学习如何解释编译错误。你遇到的错误是“类型或命名空间定义,或预期的文件结尾”--编译器说的是它认为它到达了文件结尾,但结尾处有更多的东西,它不知道如何解释。
但这里重要的一点是,要知道编译器用来计算应该在哪里开始和结束的是花括号
{
和}
的使用,这两个花括号用来划分类、名称空间和其他块的开始和结束(比如if/else/for/foreach/etc)。因此,如果您遇到类似于您所看到的错误,很可能是您的花括号位置不正确,或者它们不匹配。所以如果你数一下花括号,你会得到7个
{
和7个}
,这很好--你没有打开某个东西,然后忘记关闭它。如果你仔细观察你的类是这样开始的:
这看起来是错误的--当定义一个块时,你指定了块,然后 * 然后 * 把花括号放在后面。所以你定义了一个类,但是你把花括号放在了错误的位置。要定义一个类,你要做以下事情:
因此,对于您的类,您需要一个名称为
Player
的公共类,它继承自MonoBehaviour
,没有接口,因此它应该是:update函数的代码中还有另一个花括号错误--下面是update方法的全部内容(从start curly到end curly):
这可能不是您想要的。字段
groundCheck
etc和方法FixedUpdate
应该在Update
函数之外定义。尝试在if
语句之后关闭Update
函数,以便将以下代码定义为类的一部分,而不是Update
方法的一部分。查看花括号错误的最好方法是遵循一致的indentation style,每个花括号缩进一个级别,这样你就可以很容易地看到类或函数或其他东西的一部分,并帮助你调试这类问题。
vsaztqbk2#
正如其他人在注解中指出的那样,您的代码中存在几个格式错误,例如类声明前多了一个左括号
{
,Update
方法缺少一个右括号}
。如果你使用的是像VisualStudio这样的IDE,内置的格式化选项(
Edit > Advanced > Format Document
)可以帮助你组织括号的缩进;尽管它们不会自动解决错误😉下面是您的代码,但格式更详细:
我已经将变量移到了顶部,这样就可以很容易地将它们与其余代码区分开来,并为内置Unity函数添加了一个
private
访问修饰符。