TksLab

IT系ブログ

【Unity】3D射的ゲームを作ってみる③(人から弾を発射する)

スポンサーリンク

前回は移動する人オブジェクトを作ったので、今回は弾を発射してみましょう。

 

弾のオブジェクトは複数使用すると思うので、プレハブ(複製する機能)を使っていきます。

4.弾を作成する

4-1.オブジェクトを作成

ヒエラルキーウインドウで「Bullet」として丸いゲームオブジェクトを作成します。

f:id:tkslab:20190110000908p:plain

ヒエラルキーウインドウで「Bullet」を選択して、インスペクターウインドウのAdd Componentボタンを押して、Rigidbodyを追加します。(虫眼鏡の入力欄に入力しないと出てこないかもしれません)

 ※Rigidbodyは物理特性によって制御する事ができるようになります。重力とか。

 

4-2.弾をプレハブ化します。

 ・ヒエラルキーウインドウのBulletをプロジェクトウインドウのPrefabsフォルダにドラッグします。ヒエラルキーウインドウのBulletは削除してください。

f:id:tkslab:20190110002034p:plain

 

4-3.プレハブ用の弾オブジェクトを作成

ヒエラルキーウインドウからCreate Emptyオブジェクトを作成して「BulletFactory」にリネームします。

ヒエラルキーウインドウで「BulletFactory」を選択して、インスペクターウインドウのAdd Componentボタンを押して、虫眼鏡の入力欄にスクリプト名(ここでは「BulletFactoryScript」とします)を入力して、New Script>Create add Addをクリックします。

・プロジェクトウインドウにできたスクリプトはScriptsフォルダに入れておきましょう。

・「BulletFactoryScript」を編集して「public GameObject bullet;」のコードを追加したら、プレハブ「Bullet」をBulletFactoryのインスペクタウインドウの「Bullet」にドラッグします。

f:id:tkslab:20190110002837p:plain

 

4-4.弾を発射する

・発射できるように以下のように「BulletFactoryScript」を編集します。

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

public class BulletFactoryScript : MonoBehaviour
{
    // プレハブ弾オブジェクト
    public GameObject bullet;
    // スピード
    public float speed;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        // スペースキーが押されたら
        if (Input.GetKeyDown(KeyCode.Space))
        {
            // 発射メソッドを呼び出す
            Shot();
        }
    }

    // 発射
    public void Shot()
    {
        // インスタンス生成
        GameObject newBullet = (GameObject)Instantiate(bullet, transform.position, Quaternion.identity);

        // Rigidbodyの情報を取得
        Rigidbody bulletRigidbody = newBullet.GetComponent();

        // z軸方向の力を加える
        bulletRigidbody.AddForce(transform.forward * speed);
    }
}

speedはインスペクターウインドウで1000にします。

f:id:tkslab:20190111224023p:plain

 

これで弾は出るようになりましたが、人を動かしても同じところからしか弾が発射されません。

 

そんな時は、ヒエラルキーウインドウでPeopleにBulletFactoryをドラッグして子要素扱いにします。これで弾も人と一緒に移動するようになりました。

f:id:tkslab:20190111223411p:plain

 

これで人オブジェクトも完成しました。

次回は当たり判定を作ってみます。

 

あと、色も同色で分かりにくいので色付けしたいと思います。

オブジェクト作った段階で色付けすれば良かったですね。