Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计数旋转[单位C#]_C#_Android_Unity3d - Fatal编程技术网

计数旋转[单位C#]

计数旋转[单位C#],c#,android,unity3d,C#,Android,Unity3d,尝试找出在微调器通过360度后增加旋转计数的方法。虽然这永远不起作用,因为euleranges重置为360。做这件事的好方法是什么?我试着做>355,但这不是一个很好的解决方案 Spinner.transform.Rotate(0, 0, speed); float angleZ = Spinner.rotation.eulerAngles.z; if (angleZ > 360) {

尝试找出在微调器通过360度后增加旋转计数的方法。虽然这永远不起作用,因为euleranges重置为360。做这件事的好方法是什么?我试着做>355,但这不是一个很好的解决方案

            Spinner.transform.Rotate(0, 0, speed);
            float angleZ = Spinner.rotation.eulerAngles.z;

            if (angleZ > 360)
            {
                Rotations++;
            }

您可以将角度除以360并将其转换为int以获得旋转次数

Rotations = (int)(angle / 360f);

您可以将角度除以360并将其转换为int以获得旋转次数

Rotations = (int)(angle / 360f);

您需要在旋转前后检查角度

根据文档,“速度”是旋转的度数,因此将速度的整数除以360再加上旋转,然后检查是否重置了最终值

float angleZ1 = Spinner.rotation.eulerAngles.z;
Spinner.transform.Rotate(0, 0, speed);
float angleZ2 = Spinner.rotation.eulerAngles.z;
float angleZDiff = angleZ2 - angleZ1;


Rotations += (int)(speed / 360);
if ((speed >0) && (angleZDiff < 0))
    Rotations++
else if ((speed < 0) && (angleZDiff > 0))
    Rotations--;
float angleZ1=Spinner.rotation.eulerAngles.z;
旋转器。变换。旋转(0,0,速度);
浮动角度Z2=微调器旋转欧拉角度z;
浮动角度ZDIFF=角度Z2-角度Z1;
旋转+=(int)(速度/360);
如果((速度>0)和&(角度dDiff<0))
轮换++
否则,如果((速度<0)和(&(角度dDiff>0))
旋转--;

您需要检查旋转前后的角度

根据文档,“速度”是旋转的度数,因此将速度的整数除以360再加上旋转,然后检查是否重置了最终值

float angleZ1 = Spinner.rotation.eulerAngles.z;
Spinner.transform.Rotate(0, 0, speed);
float angleZ2 = Spinner.rotation.eulerAngles.z;
float angleZDiff = angleZ2 - angleZ1;


Rotations += (int)(speed / 360);
if ((speed >0) && (angleZDiff < 0))
    Rotations++
else if ((speed < 0) && (angleZDiff > 0))
    Rotations--;
float angleZ1=Spinner.rotation.eulerAngles.z;
旋转器。变换。旋转(0,0,速度);
浮动角度Z2=微调器旋转欧拉角度z;
浮动角度ZDIFF=角度Z2-角度Z1;
旋转+=(int)(速度/360);
如果((速度>0)和&(角度dDiff<0))
轮换++
否则,如果((速度<0)和(&(角度dDiff>0))
旋转--;


您可以在不同距离添加两个碰撞器,然后碰撞检查点将提供额外的正确数据点,而不管速度如何

您可以在不同距离添加两个碰撞器,然后碰撞检查点将提供额外的正确数据点,而不管速度如何

这只是提供了角度-而不是rotations@PaulF对不起,实际上是分区,我已经修正了我的答案。如果你阅读了问题-OP说eulerAngles总是重置为360-因此值总是>=0&<360-这就是为什么会出现问题。你可以在不同的距离添加两个碰撞器,那么碰撞检查点将提供额外的数据点,这些数据点无论速度如何都是正确的。这只是给出了角度-而不是rotations@PaulF对不起,实际上是分区,我已经修正了我的答案。如果你阅读了这个问题-OP说eulerAngles总是重置为360-因此该值总是>=0&<360-这就是问题的原因。你可以在不同的距离添加两个碰撞器,那么碰撞检查点将提供额外的数据点,这些数据点无论速度如何都是正确的。这是有意义的。如果速度太快怎么办?如果速度太快-即导致旋转超过360度,则您将错过旋转-例如,如果速度导致旋转361度,因为欧拉角“重置”如果旋转到360度,则旋转看起来只有1度。您可以使用什么方法来避免这种情况?查看-您的速度参数是您旋转的度数-因此您可以添加该值的整数除法-我修改了上面的代码。我明白了。好吧,代码现在运行得更好了,虽然不是100%。我猜这是因为我的速度随着“摩擦力”的增加而不断降低,唯一能提高速度的方法就是点击屏幕。例如,当我点击时,对象旋转半圈,速度再次为0。虽然使用EulerAngles,但我知道确切的旋转角度,当它达到350并被记录时,它可以正常工作。但是当速度达到疯狂时,这是不可能的。这是有道理的。如果速度太快怎么办?如果速度太快-即导致旋转超过360度,则您将错过旋转-例如,如果速度导致旋转361度,因为欧拉角“重置”如果旋转到360度,则旋转看起来只有1度。您可以使用什么方法来避免这种情况?查看-您的速度参数是您旋转的度数-因此您可以添加该值的整数除法-我修改了上面的代码。我明白了。好吧,代码现在运行得更好了,虽然不是100%。我猜这是因为我的速度随着“摩擦力”的增加而不断降低,唯一能提高速度的方法就是点击屏幕。例如,当我点击时,对象旋转半圈,速度再次为0。虽然使用EulerAngles,但我知道确切的旋转角度,当它达到350并被记录时,它可以正常工作。但是当速度达到疯狂时,这是不可能的。