尝试使用建议的选项有一个错误vector3右边不在其定义中 line transform.Rotate(Vector3.Right
提前谢谢
using UnityEngine;
using System.Collections;
public class ForwardBack : MonoBehaviour {
// speed variable
public float speed;
public KeyCode pressLeft;
public KeyCode pressRight;
public float rotationSpeed;
// Use this for initialization
void Start () {
speed = 1f;
}
// Update is called once per frame
void Update () {
transform.Translate(0f, speed*Input.GetAxis("Vertical") * Time.deltaTime,0f);
if (Input.GetKey(KeyCode.RightArrow))
{
transform.Rotate(Vector3.Right * rotationSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.Rotate(Vector3.Left * rotationSpeed * Time.deltaTime);
}
}
}
答案 0 :(得分:2)
尝试使用Input.GetKey
代替Input.GetKeyDown
Input.GetKeyDown
检测是否按下按钮,而Input.GetKey
检查是否按下了按钮。我想这就是为什么你的气缸只转了一次。
答案 1 :(得分:1)
您的代码中存在一些效率低下的问题。您不应该在GetComponent<>()
循环中调用Update
。而是使用Start
函数存储对它的引用,并在Update
循环中使用它:
public class ForwardBack : MonoBehaviour
{
private Transform thisTransform = null;
void Start ()
{
// Get refrence
thisTransform = GetComponent<Transform>();
}
void Update ()
{
//Use refrence.
thisTransform.Rotate(Vector3.right * Time.deltaTime);
}
}
注意:您可能会发现MonoBehaviour
的每个孩子都会继承transform
属性,该属性会查找对Transform
组件的引用。使用它是低效的。你应该像我在这里看到的那样得到你自己的参考。
编辑:正如@JoeBlow所述,transform
属性可能可以使用。没有提到它如何返回Unity文档中的Transform
组件。我已经读过它只是GetComponent
的一个包装器,尽管来自几个不同的来源。请自行决定使用。
其次,不要使用eulerAngles进行旋转。它甚至在docs中也是如此。
仅使用此变量读取并将角度设置为绝对值。不要增加它们,因为当角度超过360度时它会失败。改为使用Transform.Rotate。
看起来你甚至没有增加角度,只是将其设置为new Vector3(0, 0, -90)
,这意味着即使你这样做也只会设置为该值而不是慢慢增加。
eulerAngles
的文档还会引导您使用Transform.Rotate所使用的内容。要使其工作,您必须将输入法更改为Input.GetKey
而不是{ {1}}但在其他一个答案中已经提到过这一点。然后,您可以围绕所需的轴旋转。请记住使用Input.GetKeyDown
缩放值,以便无论您拥有什么帧率,它都以相同的速度旋转。您的轮换代码可能如下所示:
Time.deltaTime