在 Unity 中,我有一个随时间旋转的圆形 Sprite 。
private void Update()
{
transform.Rotate(0, 0, 10 * Time.deltaTime);
}
我想计算这个圆中的n block 。一些例子:
block 的数量由数组的长度给出
private void SplitCircle(Part[] parts)
{
// split the circle by the amount of parts
}
我只需计算一下即可。我不需要 UI 部分!
每 block 都与圆成 (360/n) 度。当有 5 件时,第一部分的范围应为 0 到 72。第二部分的范围应为 73 到 144,依此类推。
在我的场景中,我有一个按钮可以停止圆圈的旋转。是否可以计算按下按钮时哪个部分在顶部?
最佳答案
将圆旋转值标准化为 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/