Unity - 在多个方向上旋转立方体

时间:2016-12-24 10:35:57

标签: c# unity3d rotation

我可以使用以下代码在多个方向上旋转立方体:

public float speed = 100f;
public Animation anim;
Animator animator;

public Vector3 RotateAmount;

bool running = false;

void Start()
{
    animator = GetComponent<Animator>();
}

void Update()
{
    if (Input.GetKey("up"))
        transform.Rotate(Vector3.right, speed);
    if (Input.GetKey("left"))
        transform.Rotate(Vector3.up, speed);
    if (Input.GetKey("right"))
        transform.Rotate(Vector3.down, speed);
    if (Input.GetKey("down"))
        transform.Rotate(Vector3.left, speed);
}

现在我想要的是旋转一个立方体,无论哪个面在前面。但是上面的代码没有这样做。如果我按a然后它向右旋转但是当我向右按它时它向左旋转。这是我想要避免的。有人可以帮助我弄清楚逻辑或任何想法吗?

初学者团结一致。

1 个答案:

答案 0 :(得分:1)

您应该将speedTime.deltaTime相乘,否则您的旋转速度将取决于当前的帧速率。

你可能正在局部空间中添加旋转,这会让一切都变得混乱。

<强> RotateScript.cs

using UnityEngine;

public class RotateScript : MonoBehaviour
{

float speed = 100f;

// Use this for initialization
void Start()
{

}

// Update is called once per frame
void Update()
{
    if (Input.GetKey("up"))
    {
        transform.RotateAround(this.transform.position, new Vector3(1, 0, 0), speed * Time.deltaTime);
    }
    if (Input.GetKey("down"))
    {
        transform.RotateAround(this.transform.position, new Vector3(-1, 0, 0), speed * Time.deltaTime);
    }
    if (Input.GetKey("left"))
    {
        transform.RotateAround(this.transform.position, new Vector3(0, 1, 0), speed * Time.deltaTime);
    }
    if (Input.GetKey("right"))
    {
        transform.RotateAround(this.transform.position, new Vector3(0, -1, 0), speed * Time.deltaTime);
    }
}
}

此代码围绕其在世界this.transform.position中的当前位置旋转立方体(如果使用不同的模型,请确保此点是对象的中心,否则旋转看起来很奇怪。)

对于未以原点为中心建模的对象,您可以尝试transform.renderer.bounds.center获取中心。