我有问题我想让我的玩家在4个方向上移动:向上,向下,向左和向右......这是我的剧本
using UnityEngine;
using System.Collections;
public class MovingPlayer : MonoBehaviour {
float speed = 4f;
// Update is called once per frame
void Update () {
if (Input.GetKey (KeyCode.A)) {
transform.Translate(Vector2.right * speed * Time.deltaTime);
}
else if (Input.GetKey (KeyCode.D)) {
transform.Translate(-Vector2.right * speed * Time.deltaTime);
}
else if (Input.GetKey (KeyCode.W)) {
transform.Translate(Vector2.up * speed * Time.deltaTime);
}
else if (Input.GetKey (KeyCode.S)) {
transform.Translate(-Vector2.up * speed * Time.deltaTime);
}
}
}
它只适用于左右,而不是上下!
答案 0 :(得分:1)
您的代码使用else if
表示所有四个方向。这意味着角色一次只能朝一个方向移动。如果按下“A”,则忽略所有else
个分支。如果按下“D”,则忽略“W”和“S”分支。
在左右之间或上下之间交换时使用else if
是有意义的,因为播放器一次只能在给定轴上移动一个方向。但如果条件:
if (Input.GetKey (KeyCode.A)) {
transform.Translate(Vector2.right * speed * Time.deltaTime);
}
else if (Input.GetKey (KeyCode.D)) {
transform.Translate(-Vector2.right * speed * Time.deltaTime);
}
if (Input.GetKey (KeyCode.W)) {
transform.Translate(Vector2.up * speed * Time.deltaTime);
}
else if (Input.GetKey (KeyCode.S)) {
transform.Translate(-Vector2.up * speed * Time.deltaTime);
}
我还建议查看unity文档中的Input类。输入管理器允许您定义输入轴(基于键盘,鼠标或操纵杆输入),并在范围[-1,1]上将其作为连续值读取。 Unity定义了两个名为“Horizontal”和“Vertical”的默认轴,分别读取AD和WS的输入。要使用虚拟轴,您可以使用:
transform.Translate(Vector2.right * Input.GetAxis("Horizontal") * Time.deltaTime);
transform.Translate(Vector2.up * Input.GetAxis("Vertical") * Time.deltaTime);
答案 1 :(得分:0)
试试这个,它会移动与全局坐标相关的对象:
(...)
else if (Input.GetKey (KeyCode.W)) {
transform.Translate(0, Vector2.up * speed * Time.deltaTime, Space.World);
}
else if (Input.GetKey (KeyCode.S)) {
transform.Translate(0, -Vector2.up * speed * Time.deltaTime, Space.World);
}