让玩家朝着他面向的方向移动(Unity3D / C#)

时间:2015-05-17 13:07:27

标签: c# unity3d 2d

现在我在屏幕上有一个小士兵,用W,A,S,D移动并用箭头键旋转/改变方向。我想要发生的是当玩家的方向改变时(通过使用箭头键),按W将向他发送该方向而不是屏幕。

另外(例如),如果你同时拿着D和右箭头键,他应该围绕地面上的一个点移动一圈(而不是在一条直线上移动到一个圆圈中旋转到对)。

这是我目前的代码:

public class MovePlayer : MonoBehaviour {
  void Update() {
    // Rotate left
    if (Input.GetKey (KeyCode.LeftArrow)) {
      transform.Rotate(0, 0, 1.3f);
    }
    // Rotate right
    if (Input.GetKey(KeyCode.RightArrow)) {
      transform.Rotate(0, 0, -1.3f);
    }
    // Strafe left
    if (Input.GetKey (KeyCode.A)) { 
  Vector3 position = this.transform.position;
      position.x -= 0.055f;
      this.transform.position = position;
    }
    // Move up      
    if (Input.GetKey (KeyCode.W)) {
      Vector3 position = this.transform.position;
        position.y += 0.043f;
        this.transform.position = position;
    } 
    // Move down        
    if (Input.GetKey (KeyCode.S)) {
      Vector3 position = this.transform.position;
      position.y -= 0.043f;
      this.transform.position = position;
      isMoving = true;
    }
    // Strafe right     
    if (Input.GetKey (KeyCode.D)) {
      Vector3 position = this.transform.position;
      position.x += 0.055f;
      this.transform.position = position;
    } 
}

}

有什么想法吗?不确定要搜索的内容。

2 个答案:

答案 0 :(得分:0)

以下是我为自己的角色所做的事情(加上方向的鼠标脚本)

update()
{
        Vector3 dir = new Vector3(); //(0,0,0)
        //float CharacterSpeed = 10.0f;

        if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))
            dir.z += 1.0f;
        else if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
            dir.x -= 1.0f;
        else if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
            dir.z -= 1.0f;
        else if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
            dir.x += 1.0f;

        dir.Normalize();
        transform.Translate(dir * CharacterSpeed * Time.deltaTime);
}

如果你只有键盘用于移动:(我不确定%100)

        Vector3 dir = new Vector3(); //(0,0,0)
        //float CharacterSpeed = 10.0f;

        if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))
            dir.z += 1.0f;
        else if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
        {
            var Rotation = Quaternion.AngleAxis("Rotation Angle Here", transform.InverseTransformDirection(Vector3.up));
            transform.localRotation *= Rotation;
        }
        else if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
            dir.z -= 1.0f;
        else if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
            {
            var Rotation = Quaternion.AngleAxis("Rotation Angle Here", transform.InverseTransformDirection(Vector3.up));
            transform.localRotation *= Rotation;
        }

        dir.Normalize();
        transform.Translate(dir * CharacterSpeed * Time.deltaTime);

答案 1 :(得分:0)

您可以使用Transform.forward在世界空间中获取面向方向,然后只需缩放,并加起来为当前position。只需将其与 W

联系起来

this.transform.position += this.transform.forward * 0.043f;