【问题标题】:Unity - Rotate a cube in multiple directionsUnity - 向多个方向旋转立方体
【发布时间】:2016-12-24 10:35:57
【问题描述】:

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

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 然后它会向右旋转,但是当我按下右时它会向左旋转。这是我想要避免的。有人可以帮我弄清楚逻辑或任何想法吗?

初学者请团结。

【问题讨论】:

标签: c# unity3d rotation


【解决方案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获取中心。

【讨论】:

  • 我不知道为什么,但我用你的更新代码替换了我的更新代码,每当我播放它并按任意方向键时整个场景都会冻结。
  • 您是否在新项目中尝试过我的代码?您使用的是哪个版本的统一?
  • 抱歉刚刚使用了 GetComponent().bounds.center 并且它似乎有效。非常感谢,它现在完美无缺。向右移动而不是向上移动或经过几次旋转。也感谢您的代码。还有一件事。我如何确保一张脸一次变成另一张脸?这样我就不会旋转顶点并且它会很平滑(试图制作一个解谜器)。
  • 我不确定您要做什么。如果您想对顶点进行一些疯狂的数学运算,可以使用Mesh.vertices 访问它们。您可能想为此创建一个新问题,因为这听起来很具体,不适合评论。
猜你喜欢
  • 2018-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多