首页 > 解决方案 > 无论我的鼠标移动如何,如何让我的刚体子弹直线射击?

问题描述

我在 Unity 中制作了一个非常简单的 3D 游戏,我有这个航天飞机,我可以在小行星周围的空间中移动,并且可以在按下/按住鼠标按钮时进行射击。我通过在“发射器”transform.position 处实例化一个球体,然后对那个子弹对象施加一个向前的力来做到这一点。一切都很好,但是我不喜欢并且不知道如何解决的一件事是子弹在射击和左右移动鼠标时如何保持其位置,而不是始终保持完美的直线.

这是我同时拍摄和移动相机时的样子:

拍摄时截图

这是一个更好的可视化的 gif。

现在看起来我在尿激光,这从来都不是好事。我试着让子弹的速度快很多,但子弹变得越来越难看,看起来也不太好。

这是我射击子弹的代码:

private void Fire()
    {
        GameObject bullet = Instantiate(laserPrefab);
        GameObject bullet2 = Instantiate(laserPrefab);

        Physics.IgnoreCollision(bullet.GetComponent<Collider>(), shuttleCollider.GetComponent<Collider>());
        Physics.IgnoreCollision(bullet2.GetComponent<Collider>(), shuttleCollider.GetComponent<Collider>());

        bullet.transform.position = laserEmitter.position;
        bullet2.transform.position = laserEmitter2.position;
        /*Vector3 rotation = bullet.transform.rotation.eulerAngles;
        Vector3 rotation2 = bullet2.transform.rotation.eulerAngles;
        bullet.transform.rotation = Quaternion.Euler(rotation.x, transform.eulerAngles.y, rotation.z);
        bullet2.transform.rotation = Quaternion.Euler(rotation2.x, transform.eulerAngles.y, rotation2.z);*/

        bullet.GetComponent<Rigidbody>().AddForce(laserEmitter.forward * laserSpeed, ForceMode.Impulse);
        bullet2.GetComponent<Rigidbody>().AddForce(laserEmitter.forward * laserSpeed, ForceMode.Impulse);

        StartCoroutine(DestroyBulletAfterTime(bullet, bulletDeathTime, bullet2));
    }

不要介意评论的行,我只是在乱搞,看看我能不能让它工作。无论有没有这些注释行,拍摄的行为都是一样的。

标签: c#unity3d

解决方案


当然,基于射弹的系统会表现得像射弹系统。

如果您想要激光行为,请使用 LineRenderer。Raycast 您的激光线应该结束的位置(激光最大距离或击中范围内物体的点)。

如果您不喜欢它的“静态”外观,请将 LineRenderer 材质更改为随时间变化的内容(搜索着色器/LineRenderer 效果)。


推荐阅读