unity銃弾を発射するシステム

こんにちはR&R(renrencreate)です。今回は初心者向けにタップした位置に銃弾が発射されるようなシステムについて作り方を解説していきます。

完成イメージ

タップ(クリック)したところに銃弾が飛んでいく

銃弾の準備

まずは銃弾を用意します。

1.3Dオブジェクトの球を一つ作成します。

2.rigidboyを添付します。とくになにもいじらなくて大丈夫です。

3.このオブジェクトに以下のスクリプトとアタッチしてあげます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BulletController : MonoBehaviour
{
   public void Shoot(Vector3 dir)
    {
        GetComponent<Rigidbody>().AddForce(dir);//指定された向きに力を加える
    }
}

4.これをAssets→Prefabsフォルダーを作りこの中にドラックして入れます。そうするとコピーがフォルダーに生成されます。青い表示になったHierarcy内のオブジェクトは消してしまいましょう。

これで弾の準備はできました。

銃弾を発射する

つぎに先ほど作成したprefab内にある銃弾を発射できるようにします。

1.MainCameraに次のScriptsを添付する

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Guncontroller : MonoBehaviour
{
    public GameObject prefabBullet;
   

    private void Update()
    {
        if (Input.GetMouseButtonUp(0))//マウスが離されたとき
        {
            //マウスの位置に見えない光線をカメラから飛ばす
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            //その光線の位置を取得
            Vector3 dir = ray.direction;

            GameObject bullet = Instantiate(prefabBullet);//Instantiateは()のなかのオブジェクトを生成する関数。ゲームオブジェクトのbulletというやつをこれって定義するよ。という意味。
            bullet.transform.position = transform.position;
       //生成された弾のposition=このスクリプトがアタッチされているオブジェクトの位置

            //発射する。ここで3000は与える力です。
            bullet.GetComponent<BulletController>().Shoot(dir.normalized * 3000);
        }
    }
}

ここで知っておいた方が良いのは[Instantiate](プレファブ化したオブジェクト)です。

Instantiateは()内のオブジェクトを生成することができます。今回はGameobjectととして、bulletというものをInstantiateで生成した()内のオブジェクトってことにするよ。といった意味です。

2.MainCameraの[inspector]内のスクリプト部分にPrefab化した銃弾のオブジェクトを入れる。

これで銃弾が生成され、クリックした方向に飛んでいくようになったはずです。

コメント

タイトルとURLをコピーしました