我正在尝试制作一个分为6个部分的旋转轮。每个部分都标有一个以该部分为中心的gameObject。在玩家旋转车轮后,它将旋转直至其开始停止,然后车轮根据所选的部分(随机)移动并停在中心。我使用以下代码将滚轮旋转到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)并且滚轮开始旋转。当车轮减速时,它开始向中心移动。然后它将沿着滑动方向停止旋转并向另一侧旋转(因为到中心的距离离左侧更近)。
如何将其设置为遵循相同的滑动方向,无论哪个更接近中心。也许如果有更好的方法来做到这一点,请赐教。感谢。
答案 0 :(得分:0)
我认为旋转GameObject最简单的方法是使用:
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
有时GameObject的中心可能不会放在网格或精灵的中心。如果由于某种原因无法修改它,您可以做的是将此模型/精灵放置为Empty GameObject的子项,然后将旋转脚本附加到Empty GameObject。
答案 1 :(得分:0)
虽然我知道您不希望人们将磁盘旋转到他们想要的奖励。为什么你会使用随机奖励来解决轮换到奖励的麻烦?
你应该能够说出“滑动时间”,然后对它做一些数学运算(比如说,如果屏幕触摸时间非常短,它会至少转一次),然后为它添加一个随机范围,即在磁盘的圆周内。然后当磁盘完成旋转时,在顶部位置进行光线投射以确定奖励? (也可以将旋转时间与滑动时间联系起来,以便在相同的时间间隔内提供奖励)。
//如果我本来有权这样做,那么这条评论就会作为评论发表,因为我认为这个回答可以帮助提问者,而是作为答案提供。我希望这不会给任何一个人带来太大的影响:(