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

如果使用C#按下左/右键,我一直试图让这个Object自行前进并以循环方式左转或右转,这张图片将更清晰: 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(){ } 

}

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

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

然后,为了回答您的问题,您将不得不考虑从用户那里获得输入。 使用Input.GetKey()并为KeyCode.A传递一个KeyCode值作为’A’键。 所以你可以说:

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

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

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

 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); } } 

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

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

 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); } } 

乘数值与半径成反比。