Unity主动布娃娃系统:如何检测角色髋部旋转超限并触发瘫软?
问题分析与解决方案
你的代码存在两个核心问题:
- Unity中
transform.eulerAngles.x的取值范围是0°到360°,不存在负数,所以sphereCheckOrigin.transform.eulerAngles.x < -50这个判断永远不会触发 - 逻辑条件写反了,你需要检测的是角度超出安全范围(前倾过度或后仰过度),原条件的两个
<逻辑无法覆盖需求
修正步骤
先把髋部的X轴旋转角度转换为**-180°到180°**的范围,这样更容易区分前倾(负数角度)和后仰(正数角度)的过度情况,再修正判断条件:
修正后的代码
// sphereCheckOrigin is the character's hips float hipXAngle = sphereCheckOrigin.transform.eulerAngles.x; // 转换为-180到180的角度范围 if (hipXAngle > 180) { hipXAngle -= 360; } // 检测前倾过度(角度小于-50)或后仰过度(角度大于50) if (hipXAngle < -50 || hipXAngle > 50) { Debug.Log("unbalanced"); } else { Debug.Log("balanced"); }
替代简化写法
也可以用Unity内置的Mathf.DeltaAngle函数直接得到相对角度,省去手动转换的步骤:
float hipXAngle = Mathf.DeltaAngle(0, sphereCheckOrigin.transform.eulerAngles.x); if (hipXAngle < -50 || hipXAngle > 50) { Debug.Log("unbalanced"); } else { Debug.Log("balanced"); }
Mathf.DeltaAngle会计算两个角度之间的最短差值,返回结果自动落在-180°到180°范围内,非常适合这类旋转角度的判断场景。
内容的提问来源于stack exchange,提问作者Ismail
相关产品推荐
相关产品推荐

