在Unity中,我有一个随时间旋转的圆形精灵。
private void Update()
{
transform.Rotate(0, 0, 10 * Time.deltaTime);
}
我想从这个圈子中算出 n 件。一些例子:
片段的数量由数组的长度给出
private void SplitCircle(Part[] parts)
{
// split the circle by the amount of parts
}
我只需要计算一下。我不需要用户界面部分!
每块都将从圆上取(360 / n)度。如果有5件,则第一部分的范围应为0至72。第二部分的范围应为73至144等。
在我的场景中,我有一个按钮可以停止圆的旋转。按下按钮是否可以计算出哪一部分在顶部?
答案 0 :(得分:2)
将圆旋转值归一化为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];