统一给出了"Type or namespace definition, or end-of-file expected"错误



这里有两个错误,但我很确定它们是相互依赖的:

Assets\Course Library\Scripts\PlayerController.cs(9,16(:错误CS1513:}预期

Assets\Course Library\Scripts\PlayerController.cs(42,1(:错误CS1022:类型或命名空间定义,或预期的文件结尾

这对我来说没有任何意义。我确信我的格式是正确的,语法也是正确的。每当我对错误所在的代码行进行任何更改时,它只会向我抛出更多的错误

我认为代码中可能只有一个错误导致了复合反应,但我没有发现任何错误。

有人能对Unity有更多的了解吗?请向我解释我做错了什么?

代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
void Start()
{
public float tank = GameObject.Find("tank").transform.localPosition.x;
}
public float horizontalInput;
public float speed = 5;
public float xRange = 20;
public float zRange = 30;
public float zRange2 = -8;
public float turnSpeed = 20;
public float forwardInput;
void Update()
{
if (transform.position.x < -xRange){
transform.position = new Vector3(-xRange, transform.position.y, transform.position.z);
}
if (transform.position.x > xRange){
transform.position = new Vector3(xRange, transform.position.y, transform.position.z);
}
if (transform.position.z < zRange2){
transform.position = new Vector3(transform.position.x, transform.position.y, zRange2);
}
if (transform.position.z > zRange){
transform.position = new Vector3(transform.position.x, transform.position.y, zRange);
}

horizontalInput = Input.GetAxis("Horizontal");
forwardInput = Input.GetAxis("Vertical");

transform.Translate(Vector3.forward * Time.deltaTime * speed * forwardInput);
transform.Rotate(Vector3.up, turnSpeed * horizontalInput * Time.deltaTime);
}
}

一般来说:编译器不太可能以引发这种异常的方式崩溃;(


Start中执行

public float tank = GameObject.Find("tank").transform.localPosition.x;

不能在Start方法中定义public字段(确切地说,也不能定义任何通常的方法(。

因此,在public关键字之前,编译器期望}关闭Start方法。剩下的只是由第一个错误引起的后续错误。

编译器将尝试继续并"假设"}在它期望的位置,因此您的类PlayerController已经被public float tank ...之后的下一个}关闭,因此当遇到public float horizontalInput时会出现下一个错误,因为它需要class/struct围绕它

类型或命名空间定义,或预期的文件结尾


您可能更想要

public float tank;
private void Start()
{
tank = GameObject.Find("tank").transform.localPosition.x;
}

相关内容