我可以使用以下代码在多个方向上旋转立方体:
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然后它向右旋转但是当我向右按它时它向左旋转。这是我想要避免的。有人可以帮助我弄清楚逻辑或任何想法吗?
初学者团结一致。
答案 0 :(得分:1)
您应该将speed
与Time.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
获取中心。