【问题标题】:Set direction of rotation Unity C#设置旋转方向 Unity C#
【发布时间】:2017-09-17 18:58:56
【问题描述】:

我正在尝试制作一个分为 6 个部分的旋转轮。每个部分都标有一个以该部分为中心的游戏对象。玩家旋转轮子后,它将旋转直到开始停止,然后轮子根据所选部分移动并停在中心(随机)。我使用以下代码将轮子向 X 轴上的 0 旋转。此代码可以正常工作并且轮子可以正常旋转,但前提是所选部分位于正 X 轴上。

float rotateFloat = (((randomReward + 1) * 60) - 30) - transform.rotation.z;
Quaternion targetRotation = Quaternion.Euler(new Vector3(0, 0, rotateFloat));
transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, f_difX * Time.deltaTime);

我做了一些挖掘,发现Quaternion.RotateTowards()找到了最接近目标的路径并使用该方向旋转(这导致旋转方向出现问题)。

示例(下图):玩家滑动并随机奖励(旋转轮上的数字 5),然后轮开始旋转。当车轮减速时,它开始向中心移动。然后它会沿着滑动的方向停止旋转,并且会向另一侧旋转(因为离中心的距离离左侧更近)。

无论哪个更靠近中心,我如何将其设置为遵循相同的滑动方向。也许如果有更好的方法可以做到这一点,请赐教。谢谢。

【问题讨论】:

    标签: c# unity3d rotation swipe direction


    【解决方案1】:

    我认为旋转游戏对象最简单的方法是使用:

    float Speed = 1f;
    
    void Update()
    {
        // Rotate the object around its local X axis at 1 degree per second
        transform.Rotate(Vector3.right * Time.deltaTime * Speed);
    }
    

    你可以阅读更多关于他的here

    有时可能发生在游戏对象的中心,它没有放置在网格或精灵的中心。如果您因任何原因无法修改它,您可以做的是将此模型/精灵放置为 Empty GameObject 的子项,然后将旋转脚本附加到 Empty GameObject。

    【讨论】:

      【解决方案2】:

      虽然我知道您不希望人们将磁盘旋转到他们想要的奖励。你为什么要使用随机奖励,还要费力地将轮换与奖励挂钩?

      您应该可以说捕捉“滑动时间”,然后对其进行一些数学运算(例如,如果屏幕触摸时间很短,它至少会转动一次),然后为其添加一个随机范围,即在磁盘的圆周内。那么当磁盘完成旋转时,在顶部位置进行射线投射以确定奖励? (也可以将旋转时间与滑动时间联系起来,以便在大致相同的时间间隔内提供奖励。

      //如果我有权这样做,此评论将作为评论发表,因为我认为此回复可能对提问者有所帮助,而是作为答案提供。我确实希望这不会惹恼任何人:(

      【讨论】:

      • 我实际上是这样做的。但是我没有使用“滑动时间”,而是使用了 f_difX,它基本上是玩家将手指离开屏幕的位置——在滑动之前他触摸屏幕的位置。我确实喜欢将旋转时间与滑动时间联系起来的想法。是否可以详细说明这个想法?或者如何制作这样的功能?谢谢你的回答:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 1970-01-01
      • 2018-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多