>我试图实现一个移动系统,但有一个我不知道它是什么意思的错误:
资产\moving_BEAN.cs(14,52): 错误 CS1526:新表达式在键入后需要 ()、[] 或 {}
这是我的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class moving_BEAN : MonoBehaviour
{
public float speed;
void Update()
{
float h = Input.GetAxisRaw("Horizontal");
float v = Input.getAxisRaw("Vertical");
gameObject.transform.position = new vector2;
transform.position.x + (h*speed);
transform.position.y +(v * speed);
}
}
有一个"语法"错误和一个用法错误(或两个,取决于你如何计算它)。
首先,语法错误是您在创建新结构后错过了括号。
但是,对于您的用例,您可能不想这样做。更有意义的是获取转换当前位置的副本,在该副本上执行计算,然后再将整个值分配回transform.position
字段。
var pos = transform.position;
pos.x += h * speed * Time.deltaTime;
pos.y += v * speed * Time.deltaTime;
transform.position = pos;
请注意,我还修改了位置更改Time.deltaTime
以考虑帧速率。
我们必须处理仓位值的新副本的原因是position
是一个struct
,它是一个"值"类型。这与"引用"类型相反,您不需要使用它。
首先transform.position
是一个Vector3
,你不要把它覆盖成一个Vector3
。 其次,如果你给这样的变量一个值,你用()
关闭new ClassName
,所以它看起来像这样:Classname varname = new Classname()
。 第三,请提供有关您的问题的更多信息。我无法确定这是 Unity3D 项目还是 2D。 第四,你不要使用这样的东西:
transform.position.x + (h*speed);
transform.position.y +(v * speed);
您使用"+="和整个/Vector3":
transform.position += new Vector3(h*speed, v * speed, 0);
而这2条线就足够了。您不需要它给出错误的一行。
此外,由于您在Update()
方法(与帧相关)中移动 BEAN,因此应考虑执行以下操作:
transform.position.x += (h * speed * Time.deltaTime);
transform.position.y += (v * speed * Time.deltaTime);
这样,Bean 将始终如一地移动,而不依赖于帧速率。
在这里,在第 14 行,执行此操作以修复它
gameObject.transform.position = new Vector2(someFloatForX, someFloatForY);
您的 IDE 是否为您提供红色的 sqwiggly 线?您可以单击错误以转到该行。