c# - 在幸运之轮旋转轮中找到选定的部分

标签 c# unity-game-engine

在 Unity 中,我有一个随时间旋转的圆形 Sprite 。

private void Update()
{
    transform.Rotate(0, 0, 10 * Time.deltaTime);
}

我想计算这个圆中的n block 。一些例子:

examples

block 的数量由数组的长度给出

private void SplitCircle(Part[] parts)
{
    // split the circle by the amount of parts
}

我只需计算一下即可。我不需要 UI 部分!

每 block 都与圆成 (360/n) 度。当有 5 件时,第一部分的范围应为 0 到 72。第二部分的范围应为 73 到 144,依此类推。

在我的场景中,我有一个按钮可以停止圆圈的旋转。是否可以计算按下按钮时哪个部分在顶部?

stop

最佳答案

将圆旋转值标准化为 0 到 360 度之间(旋转 % 360)。

依次从每个段范围内的每个数字中减去该值。对于每个段,找到调整范围值的下限 < 0(下限)和 >= 0(上限)的段。选择那个。

如果所选片段超出范围,请将预归一化旋转值调整 90 度,直到结果符合您的“向上”。

此外,您的范围不应该是 0..72、73..144 等。72.5 度怎么样?它应该是 72..144,下限为 >=,上限为 <.

在未经测试的 C#ish 伪代码中...

var adjust = 0; /* Adjust this +/- 90 if the result comes out with the wrong result */
var spriteRotation = (getSpriteRotationDegrees() + adjust) % 360.0f;
for (var i = 0; i < parts.length; i++) {
    var lowerBound = parts[i].lowerBound() - spriteRotation;
    var upperBound = parts[i].upperBound() - spriteRotation;
    if (lowerBound < 0 && upperBound >= 0) {
        break;
    }
}
var winningPart = parts[i];

关于c# - 在幸运之轮旋转轮中找到选定的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51533654/

相关文章:

android - unity OnTriggerExit2D 并不总是有效

android - 测试 Android 游戏的最佳屏幕分辨率

c# - 统一四元数,保持 x 和 z 旋转不变

android - Cardboard SDK Unity - 原生和共享属性的方法?

c# - 包装 Interop COM 对象时如何在 c# 中实现处置模式?

c# - 所选项目更改时如何从列表框中检索所有数据

c# - 渐变不透明度不起作用 (WPF)

c# - 在 C# 中将字符串转换为 float

c# - 制作智能感知/自动完成列表时过滤字符串列表的最快方法是什么?

unity-game-engine - Unity3D OffNavMesh跳转问题