【Unity】FPSゲームで銃弾の発射を実装する方法

unity

こんにちは、のっくんです。

この記事ではFPSゲームで銃を発砲するための方法についてご紹介します。

FPSと銃の設定

FPSゲームを作るにあたり、アセットストアから以下をダウンロードしました。

  • M4A1 PBR(マシンガン)
  • First Person All-in-One(FPSキャラ)

両方とも無料なので嬉しいですね〜。

FirstPerson-AIOをセットしたら銃をセットします。

プレイヤーの子ではなく、カメラの子としてセットする点に注意です。

(最初、私はプレイヤーの子にセットしていたので、銃がカメラと連動して回転せずに困りました。)

銃は右下の方にセットしました。

弾を発射する

弾の発射は、Rayを使います。

基本的な流れとしては以下の通り。

  • Rayを飛ばす
  • 何かに当たったらエフェクトを生成もしくは表示する
  • 敵のダメージを減らす
    void Shoot()
    {
        Ray ray = new Ray(transform.position, transform.forward);
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit, shootRange,raycastLayerMask))
        {

            if (hitEffectPrefab != null)
            {
                if (hitEffect != null)
                {
                    hitEffect.transform.position = hit.point;
                    hitEffect.transform.rotation = Quaternion.FromToRotation(Vector3.forward, hit.normal);
                    hitEffect.SetActive(true);
                }
                else
                {
                    hitEffect = Instantiate(hitEffectPrefab, hit.point, Quaternion.identity);
                }
            }

            var targetMob = hit.collider.GetComponent<MobStatus>();
            if (targetMob) {
                targetMob.Damage(1);
            }

        }

        Ammo--;
    }

基本は参考URLサイトの通りですが、敵のダメージを減らす処理を追加しています。

参考

https://unity.moon-bear.com/zombie-slayer/set-a-gun/