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
相关产品推荐
相关产品推荐

