You need to enable JavaScript to run this app. Unity C#如何检测一个物体的旋转是否处于另一物体的相近旋转范围内
优惠活动
大模型
产品
解决方案
定价
更多

Unity C#如何检测一个物体的旋转是否处于另一物体的相近旋转范围内

问题原因

  • 错误使用四元数分量:transform.rotation是四元数类型,它的x/y/z/w分量取值范围都是[-1, 1],不是你认知里的欧拉角旋转度数,直接和90做比较完全没有意义。
  • 条件逻辑矛盾:你写的判断要求数值同时大于参考值+90且小于参考值-90,这个条件在数学上永远不可能成立,所以代码实际每次都走else分支,如果你总是拿到bullet1,说明你实际代码里的分支赋值大概率写反了。

通用旋转相近判断实现

Unity提供了现成的API计算两个旋转的夹角,直接用即可满足需求:

// 阈值可根据需求调整,小于该角度判定为旋转相近
float rotateThreshold = 90f;
float angleDiff = Quaternion.Angle(hand1.transform.rotation, hand2.transform.rotation);
if (angleDiff < rotateThreshold)
{
    bulletresult = bullet1;
}
else
{
    bulletresult = bullet2;
}

仅需判断单轴(如Y轴)旋转差的实现

如果你的需求只需要对比绕Y轴的旋转角度差异,要先取欧拉角Y值,再处理角度0-360度的循环边界问题:

float y1 = hand1.transform.eulerAngles.y;
float y2 = hand2.transform.eulerAngles.y;
// 计算归一化的Y轴角度差,自动处理350度和10度差20度这类边界场景
float yDiff = Mathf.Abs(Mathf.DeltaAngle(y1, y2));
if (yDiff < 90f)
{
    bulletresult = bullet1;
}
else
{
    bulletresult = bullet2;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 08:06:08