这里有两个错误,但我很确定它们是相互依赖的:
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;
}