在2D模式下,我有一个附加到Sprite的脚本。 Update()
部分如下:
void Update () {
if (Input.GetKeyDown ("left")) {
cursor.rigidbody2D.MovePosition (cursor.rigidbody2D.position - speedX);
} else if (Input.GetKeyDown ("right")) {
cursor.rigidbody2D.MovePosition (cursor.rigidbody2D.position + speedX);
} else if (Input.GetKeyDown ("up")) {
cursor.rigidbody2D.MovePosition (cursor.rigidbody2D.position + speedY);
} else if (Input.GetKeyDown ("down")) {
cursor.rigidbody2D.MovePosition (cursor.rigidbody2D.position - speedY);
}
}
其中cursor
是在Inspector中链接的预制件。 cursor
预制件只有2个组件,Sprite Renderer(用于定义图像)和Rigidbody 2D,其设置如下:
但是当我按下箭头键时,屏幕上显示的精灵不会移动。我错过了什么?
试图在Debug.Log()
案例中添加if
,它真的进入了案例。并没有发生错误。
注意:speedX = new Vector2(1,0);
和speedY = new Vector2(0,1);
答案 0 :(得分:1)
您试图从游戏的角度移动一个不存在的对象。通过从资产库中拖动预制件来分配cursor
预制件,就像分配蓝图一样。告诉预制件移动就像是在大肆宣传汽车的蓝图以加速:)
有两种通用解决方案。
实例化预制件并保存生成的参考以操纵新对象。如果您主要对使用刚体感兴趣,可以直接将其强制转换为Rigidbody2D
。只有当您的预制变量属于同一类型时,强制转换才会起作用,否则会引发异常。这种方式可确保您的预制件始终包含Rigidbody2D
,或者您甚至无法在编辑器中指定它。
public Rigidbody2D cursorPrefab; // your prefab assigned by the Unity Editor
Rigidbody2D cursorClone = (Rigidbody2D) Instantiate(cursorPrefab);
cursorClone.MovePosition (cursorClone.position - speedX);
根据您的游戏和您想要实现的目标,您还可以将脚本直接添加到预制件中。这样它的每个实例都可以控制自己。
void Update () {
if (Input.GetKeyDown ("left")) {
rigidbody2D.MovePosition (rigidbody2D.position - speedX);
} else { //...}
}