无法让子弹落在正确的位置



我正在制作一款FPS游戏,但子弹没有击中正确的位置,有时子弹在准星下方,但下一次它会远离左边。

我试着移动枪尖(也就是产生子弹的东西)以瞄准屏幕的中心,但随后子弹就偏离了轨道。发射子弹的代码很简单。如果你能帮我让子弹落在十字准星的地方,谢谢你,谢谢你读了这篇文章。

的代码
if(Input.GetMouseButton(0) && Time.time >= nextTimeToFire)
{ 
Rigidbody rb = Instantiate(Bullet, GunTip.position, Quaternion.identity).GetComponent<Rigidbody>();
rb.AddForce(GunTip.forward * 500f, ForceMode.Impulse);
}

如果你在武器尖端,准星(为了简单起见,如果武器尖端正好在准星下面)和准星指向的目标之间画一个三角形(现在是假想的),当目标在10米或100米之外时,你会看到一个不同的三角形。

在此基础上,我将做一个光线投射。十字准星(在这种情况下,从摄像机位置到摄像机前方)。这样,你就可以得到子弹应该到达的位置,你可以像这样添加力(半伪):

[SerializeField] private Transform _camera;
[SerializeField] private Transform _weaponTip;
[SerializeField] private LayerMask _bulletLayerMask;
[SerializeField] private float _range;
[SerializeField] private float _bulletInitSpeed;
private void Update()
{
if (<can shoot checks>)
{
if (Physics.Raycast(_camera.position, _camera.forward, out RaycastHit hit, _range, _bulletLayerMask)
{
Rigidbody bullet = <instantiate stuff>;
// calculating the direction from the weapon tip to the impact point
bullet.AddForce((hit.point - _weaponTip.position).normalized * _bulletInitSpeed, ForceMode.Impulse);
}
}
}

很难马上看出问题是什么。你能在什么地方分享整个项目吗?我试着在我自己的电脑上这样做,它似乎对我很好。我想到的一个想法是,你的手枪可能不一定指向准星,所以你的子弹偏离了轨道。

最新更新