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

Unity 2D 霰弹枪欧拉角为180°时子弹不按朝向移动问题求助

问题解决:Unity 2D霰弹枪左右朝向子弹扩散异常修复

问题根源

  • 冗余的方向判断逻辑错误:Transform.right 本身就是物体在世界空间下的自身右方向矢量,当物体Y轴旋转180°朝左时,t.right 天然就是向左的矢量,你额外乘-1反而会反转正确方向,直接导致朝左发射时子弹方向完全错误。
  • 四元数取值逻辑存在隐患:t.rotation 是四元数,直接取y值判断不等于欧拉角的Y轴旋转值,很容易出现精度误差导致判断失效。

修复方案

1. 替换子弹移动代码

把你现有的子弹移动逻辑全部删除,替换为以下代码即可,不需要任何方向判断:

// 直接沿自身右方向移动,自动适配所有朝向的旋转角度
t.position += t.right * bSpeed * Time.deltaTime;

如果你更习惯用Translate方法,也可以写为:

t.Translate(t.right * bSpeed * Time.deltaTime, Space.World);

2. 可选优化:简化子弹生成逻辑

你现有的switch判断扩散角度的代码可以简化为以下写法,更易维护:

// 提前定义扩散角度数组
float[] spreadAngles = new float[] {-30f, -15f, 0f, 15f, 30f};
for (int i = 0; i < spreadAngles.Length; i++)
{       
    GameObject bt = objectPool.SpawnFromPool(Bullet, firePoint.position, firePoint.rotation);
    bt.transform.Rotate(0, 0, spreadAngles[i]);
}

效果验证

修改完成后,无论枪口朝向哪个方向,子弹都会严格按照自身设置的旋转角度飞行,左右朝向的扩散效果会完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:36:04