【Unity实战】如何时刻让子弹保持正确朝向

在做射击游戏的时候(尤其是第三人称越肩),我们可能会用Raycast去做面向前方的射线检测。

RaycastHit hit;
if (Physics.Raycast(transform.position, transform.forward, out hit, MaxDistance))
{
	// 子弹击中目标,触发技能效果
	Debug.Log($"[{GetType()}] 子弹击中目标:{hit.collider.name}");
	DoDamage(hit.collider);
}

看似没什么问题,但有的时候会感觉朝向有些偏移,命中率不高。这种情况一般都是跟父级物体的rotation、轴向有些关系,尤其是我们在做人物IK瞄准、动画的时候。可能会因为各个骨骼IK权重的不同等原因,实际上枪口不一定是真的、绝对的朝向目标。

如果要做到接近指哪打哪的程度,我们可以在做射线检测之前做如下调整,这个调整建议放在子弹Instantiate那块,把子弹的rotation给调整一下。

假设之前的子弹出生是这个样子:

projectileSpawnRotation = AimTransform.rotation;

* AimTransform指枪口。

调整后应该是这个样子:

projectileSpawnRotation = Quaternion.LookRotation(_ik.Aim.solver.IKPosition - AimTransform.position);

区别在于我们不完全依赖于枪口的旋转,我们会将瞄准的点和枪口位置相减,算出来以枪口为参考系的朝向。这样的话基本能提高我们子弹的命中率。

Anyway, happy programming!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值