如何多次旋转GameObject

时间:2016-04-26 12:59:24

标签: c# unity3d unity5

尝试使用建议的选项有一个错误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);
        }
    }
}

2 个答案:

答案 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