【问题标题】:Tilt GameObject from side to side左右倾斜游戏对象
【发布时间】:2016-04-12 18:53:08
【问题描述】:

我正在玩 Google Cardboard。我坐在驾驶舱里,可以毫无问题地环顾四周。

现在我想将我的驾驶舱从一侧倾斜到另一侧,以获得更真实的感觉,而不仅仅是静止不动。

到目前为止,我有这个:

using UnityEngine;
using System.Collections;

public class Tilt : MonoBehaviour 
{
    float speed = 0.25f;

    void Update()
    {
        Tilter ();
    }

    void Tilter()
    {
        if (transform.rotation.z < 5f) {
            transform.Rotate (new Vector3 (0f, 0f, speed));
        }

        if (transform.rotation.z > 5f)
            transform.Rotate (new Vector3 (0f, 0f, -speed));
    }

}

这开始按预期将驾驶舱向左倾斜,但是一旦旋转大于 5 的值,驾驶舱就不会向另一个方向旋转,它会继续以相同的方式旋转,而不是相反的方向。

【问题讨论】:

  • 您的代码中存在的一个逻辑问题是,即使它完美运行,您的旋转最终也会锁定在 z=5。当它超过 5 时,它会回到 5 ......当它稍微低于它时,它会回到和高于 5。这将在 5 附近无限振荡,基本上是一种振动(幅度取决于speed )。这是你的意图吗?
  • @Tom 这是一个很好的问题。你为什么删除它?问题解决了吗?
  • @Programmer 我输入了大约 15 分钟,然后才意识到我在检查器中分配了错误的东西 -.- 只是一个愚蠢的错误!你认为我应该把它留下来,把我尴尬的答案放进去吗? :')
  • 大声笑。没有答案很尴尬。我正要回答它,然后事情就关闭了。我很想知道为什么。没关系。无论哪种方式,我的回答都行不通。祝你的游戏好运。
  • @Programmer 我想对我来说是漫长的一天!谢谢,期待您的帮助! :-)

标签: c# unity3d rotation


【解决方案1】:

我没有尝试过这段代码,但如果我理解你想要做什么,我会建议使用 Mathf.Sin 和 Time.time 连续获取 -1 到 1 范围内的值,然后乘以驾驶舱的旋转范围。例如:

using UnityEngine;
using System.Collections;

public class Tilt : MonoBehaviour 
{
    float speed = 1.0f;
    float rotationAngle = 45;

    void Update()
    {
        Tilter ();
    }

    void Tilter()
    {
        float rotationZ = rotationAngle * Mathf.Sin(Time.time * speed);
        transform.Rotate (new Vector3 (0f, 0f, rotationZ ));
    }

}

这个例子应该慢慢地把你的驾驶舱从 0 旋转到 45,然后回到 0,然后到 -45,然后再回到 0,依此类推(我还没有尝试过)。

您可以增加或减少速度的值以使旋转更快或更慢。

【讨论】:

    猜你喜欢
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    相关资源
    最近更新 更多