You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何挂载脚本的物体无论Z轴旋转角度,if语句都会触发?

问题分析与修复

原代码逻辑错误

你写的条件判断存在逻辑问题:

if(Mathf.Abs(transform.rotation.eulerAngles.z) > 90 ||  Mathf.Abs(transform.rotation.eulerAngles.z) < 180)
{
    mySpriteRenderer.flipY = true;
}
else
{
    mySpriteRenderer.flipY = false;
}

这里用了||(逻辑或),意味着任何数值都会满足其中一个条件——毕竟所有数字要么大于90,要么小于180,所以这个判断永远为true,导致Sprite始终处于翻转状态。

修正后的代码

根据你的需求(Z轴旋转后物体右侧指向左侧时翻转Y轴),正确逻辑应该是判断旋转绝对值处于90到180之间,需要用&&(逻辑与):

float zRotationAbs = Mathf.Abs(transform.rotation.eulerAngles.z);
if(zRotationAbs > 90 && zRotationAbs < 180)
{
    mySpriteRenderer.flipY = true;
}
else
{
    mySpriteRenderer.flipY = false;
}

更严谨的优化方案

考虑到欧拉角的循环特性(范围0-360),可以先将旋转值转换到-180到180的区间,再判断是否转向左侧:

float zRotation = Mathf.DeltaAngle(0, transform.rotation.eulerAngles.z);
if(zRotation < -90 || zRotation > 90)
{
    mySpriteRenderer.flipY = true;
}
else
{
    mySpriteRenderer.flipY = false;
}

Mathf.DeltaAngle会自动计算两个角度的最短差值,结果范围固定在-180到180,这样判断物体是否转向左侧会更准确。

内容的提问来源于stack exchange,提问作者GamblingGambit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 22:05:54