微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用霰弹枪 2D 自上而下射击游戏统一 C#

如何解决使用霰弹枪 2D 自上而下射击游戏统一 C#

我正在尝试用霰弹枪射击,我已经用一颗子弹射击了。代码

            Vector2 shootingDirection = new Vector2(joystick.Horizontal,joystick.Vertical);
            shootingDirection.normalize();           
            if (shootingDirection != new Vector2(0,0))
            {
                if(isShotGun) ShotGunShoot(shootingDirection);
                GameObject bullet = Instantiate(bulletPrefab,crossHair.transform.position,Quaternion.identity);
                bullet.transform.Rotate(0.0f,0.0f,Mathf.atan2(shootingDirection.y,shootingDirection.x) * Mathf.Rad2Deg);
                bullet.GetComponent<Rigidbody2D>().AddForce(shootingDirection * 10f,ForceMode2D.Impulse);
            }

        }

但我只是想创建两个与主要项目略有偏差的其他项目,因此它看起来像一个分数,但它无法正常工作。代码

    private void ShotGunShoot(Vector2 dir)
    {
        GameObject shotGun = Instantiate(bulletPrefab,Quaternion.identity);
        shotGun.transform.Rotate(0.0f,Mathf.atan2(dir.y,dir.x) * Mathf.Rad2Deg - 30f);
        shotGun.GetComponent<Rigidbody2D>().AddForce((dir + new Vector2(-.3f,0f)) * 10f,ForceMode2D.Impulse);
   
        shotGun = Instantiate(bulletPrefab,dir.x) * Mathf.Rad2Deg + 30f);
        shotGun.GetComponent<Rigidbody2D>().AddForce((dir+ new Vector2(.3f,ForceMode2D.Impulse);
    }

应该的

现在来了

感谢您的帮助!

解决方法

对于轮换。您可以简单地设置方向(从您的图像中我可以看到您的子弹必须飞向其正确的向量),例如

shotgun.transform.right = dir;
shotgun.transform.Rotate(0,30);    

对于附加力:这使用世界空间方向。

您总是沿方向通过并在世界空间中添加额外的偏移量。因此,无论您朝哪个方向射击,额外的偏移始终在 X 轴方向上。

而是通过使用局部力 Rigidbody.AddRelativeForce

来考虑方向
shotGun.GetComponent<Rigidbody2D>().AddForceRelative((shotgun.transform.right + new Vector2(0f,0.3f)).normalized * 10f,ForceMode2D.Impulse);

这现在使用子弹正确的方向,并另外使用 0.3 沿其 局部 Y 轴的偏移量。


顺便说一句:如果你给你的预制件正确的类型

public Rigidbody bulletPrefab;

您可以跳过 GetComponent<Rigidbody> 调用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。