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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 02:20:13