在Unity中使用C#更改玩家方向

时间:2016-04-22 22:35:09

标签: c# unity3d

如果使用C#按下左/右键,我一直试图使这个物体自行向前移动并以圆形方式左转或右转,这张图片会更清晰:http://prnt.sc/avmxbn

我只能自己移动,这是我的代码到目前为止:

using UnityEngine;
using System.Collections;

public class PlayerBehaviour : MonoBehaviour {

Update(){ transform.localPosition += transform.forward *speed *Time.deltaTime

float speed = 5.0f;
// Use this for initialization
void Start () {
    Debug.Log ("it's working?");    

}

// Update is called once per frame
void Update () {

    transform.localPosition += transform.forward * speed * Time.deltaTime;


}

void FixedUpdate(){

}

}

但是,我不知道如何在圆形路径中更改左或右方向,如图片链接演示。有人能帮帮我吗?谢谢。

3 个答案:

答案 0 :(得分:1)

您的代码中存在明显错误。您拨打Update()两次。第一次没有返回类型。你不应该这样做。首先删除第一行Update()和同一行的代码。

然后,要回答您的问题,您必须考虑从用户那里获取输入。使用Input.GetKey()并为{A}键传递KeyCode值,例如KeyCode.A。所以你可以说:

if(Input.GetKey(KeyCode.A))
{
    //do something(for example, Turn the player right.)
}

然后考虑使用transform.Roate旋转对象来旋转播放器。

答案 1 :(得分:0)

将此脚本附加到移动对象:

using UnityEngine;

public class MoveController : MonoBehaviour {
    float angle = 1F;
    float speed = 0.2F;
    void Update ()
    {
        if ( Input.GetKey (KeyCode.LeftArrow) )
            transform.Rotate(Vector3.up, -angle);
        else if( Input.GetKey (KeyCode.RightArrow) )
            transform.Rotate(Vector3.up, angle);

        transform.Translate(Vector3.forward * speed);
    }
}

这里的关键点是将您的移动与旋转功能分开。

答案 2 :(得分:0)

您可以使用此脚本进行移动:

using UnityEngine;

public class MovementController : MonoBehaviour {

     public Rigidbody rigidbody;

     float angle = 0f;
     const float SPEED = 1f;
     float multiplier = 1f;

     void FixedUpdate(){

         if ( Input.GetKey (KeyCode.LeftArrow) )
             angle -= Time.deltaTime * SPEED * multiplier;
         else if( Input.GetKey (KeyCode.RightArrow) )
             angle += Time.deltaTime * SPEED * multiplier;

         rigidbody.velocity = new Vector2(Mathf.Sin(angle) * SPEED, Mathf.Cos(angle) * SPEED);

    }
}

乘数值与半径成反比。