如果使用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(){
}
}
但是,我不知道如何在圆形路径中更改左或右方向,如图片链接演示。有人能帮帮我吗?谢谢。
答案 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);
}
}
乘数值与半径成反比。