我正在尝试添加一个降落伞在我的游戏中,我需要它旋转45度向右,然后45度左右,并保持交替,图表我需要如何工作在下面

我使用的代码如下所示,但是它只在一侧工作,然后不会返回。
if (maxRotation <= transform.rotation.eulerAngles.z)
{
rotatingRight = false;
}else if(minRotation <= transform.rotation.eulerAngles.z)
{
rotatingRight = true;
}
transform.Translate(Vector2.down * fallSpeed * Time.deltaTime);
if (rotatingRight)
{
transform.Rotate(Vector3.forward * 45 * Time.deltaTime);
}
else
{
transform.Rotate(Vector3.forward * -45 * Time.deltaTime);
}发布于 2020-02-05 02:28:57
正如3Dave在评论中所说,当minRotation大于或等于eulerAngles时,你应该向右旋转。
if (maxRotation <= transform.rotation.eulerAngles.z)
{
rotatingRight = false;
} else if (transform.rotation.eulerAngles.z <= minRotation)
{
rotatingRight = true;
}
transform.Translate(Vector2.down * fallSpeed * Time.deltaTime);
if (rotatingRight)
{
transform.Rotate(Vector3.forward * 45 * Time.deltaTime);
}
else
{
transform.Rotate(Vector3.forward * -45 * Time.deltaTime);
}我现在意识到这个答案的前一个版本是不必要的复杂,但现在我不能删除它,因为它已经被接受。这个问题只是由一个打字错误引起的。
发布于 2020-02-05 02:25:57
你的代码可以简化很多。实际上,您不需要使用布尔值来查看是否正确。只需在第一个if中执行,不需要第二个if。还有一个很好的机会,你可以减少错误的数量,就像这里,你的布尔值并不总是你想的那样。
float rotationValue = 45;
if(transform.rotation.eulerAngles.z >= maxRotation)
{
rotationValue = -45;
}
else if(transform.rotation.eulerAngles.z <= minRotation)
{
rotationValue = -45;
}
transform.Translate(Vector2.down * fallSpeed * Time.deltaTime);
transform.Rotate(Vector3.forward, rotationValue * Time.deltaTime);发布于 2020-02-05 03:43:52
我可以通过这样做来解决这个问题
if (maxRotation == Math.Round(transform.rotation.eulerAngles.z))
{
rotatingRight = false;
}else if(minRotation == Math.Round(transform.rotation.eulerAngles.z))
{
rotatingRight = true;
}
transform.Translate(Vector2.down * fallSpeed * Time.deltaTime);
if (rotatingRight)
{
transform.Rotate(Vector3.forward * rotationSpeed * Time.deltaTime);
}
else
{
transform.Rotate(Vector3.back * rotationSpeed * Time.deltaTime);
}https://stackoverflow.com/questions/60063099
复制相似问题