这是我用于在Unity3D 5.1.2f1 Personal中制作的Endless Runner游戏的移动脚本。向右移动完全有效。向左移动不起作用,但debug.log确实有效。在检查器中,我可以看到当向右移动时'leftrightSpeed'设置为2,但当向左移动时浮子没有任何反应。我在这里做错了什么?
(检查员中的浮动速度设置为5)。
using UnityEngine;
using System.Collections;
public class PlayerController : MonoBehaviour {
public float speed;
public float leftrightSpeed;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
//LEFT
if (Input.GetKey("left"))
{
leftrightSpeed = -2f;
Debug.Log ("LEFT");
}
else
{
leftrightSpeed = 0f;
}
//RIGHT
if (Input.GetKey("right"))
{
leftrightSpeed = 2f;
Debug.Log ("RIGHT");
}
else
{
leftrightSpeed = 0f;
}
Vector3 movement = new Vector3 (-2f, 0.0f, leftrightSpeed);
rb.AddForce (movement * speed);
}
}
答案 0 :(得分:1)
Jerry是正确的,如果你的左移动取消了你的第二个判断。您可以通过简单地使用FixedUpdate
来改善GetAxis
方法:
void FixedUpdate()
{
leftrightSpeed = Input.GetAxis("Horizontal") * 2;
Vector3 movement = new Vector3 (-2f, 0.0f, leftrightSpeed);
rb.AddForce (movement * speed);
}
基本上,GetAxis将给出介于-1和1之间的数字,具体取决于与“水平”轴相关的按键。这将适用于游戏控制器,箭头键,甚至默认情况下w / a / s / d移动。
查看GetAxis的文档。
答案 1 :(得分:0)
当您按下其他任何内容然后按右键时,您在其他第二个条件中将leftrightSpeed
设置为0。这就是为什么它适用于正确的原因。就是这样。
要做得对,请将其更改为
if (Input.GetKey("right"))
{
leftrightSpeed = 2f;
Debug.Log ("RIGHT");
}
else if (Input.GetKey("left"))
{
leftrightSpeed = -2f;
Debug.Log ("LEFT");
}
else
{
leftrightSpeed = 0f;
}