Unity2D旋转问题
Unity2D rotation issue
我想在我的游戏中添加一个降落伞,我需要它向右旋转 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);
}
您的代码可以简化很多。您实际上不需要布尔值来查看您是否走对了。在第一个 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);
正如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);
}
我现在意识到这个答案的前一个版本不必要地令人费解,但现在它被接受了,我不能删除它。这个问题只是一个打字错误造成的。
我通过这样做解决了这个问题
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);
}
我想在我的游戏中添加一个降落伞,我需要它向右旋转 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);
}
您的代码可以简化很多。您实际上不需要布尔值来查看您是否走对了。在第一个 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);
正如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);
}
我现在意识到这个答案的前一个版本不必要地令人费解,但现在它被接受了,我不能删除它。这个问题只是一个打字错误造成的。
我通过这样做解决了这个问题
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);
}