【Unity】3D射的ゲームを作ってみる③(人から弾を発射する)
スポンサーリンク
前回は移動する人オブジェクトを作ったので、今回は弾を発射してみましょう。
弾のオブジェクトは複数使用すると思うので、プレハブ(複製する機能)を使っていきます。
4.弾を作成する
4-1.オブジェクトを作成
・ヒエラルキーウインドウで「Bullet」として丸いゲームオブジェクトを作成します。
・ヒエラルキーウインドウで「Bullet」を選択して、インスペクターウインドウのAdd Componentボタンを押して、Rigidbodyを追加します。(虫眼鏡の入力欄に入力しないと出てこないかもしれません)
※Rigidbodyは物理特性によって制御する事ができるようになります。重力とか。
4-2.弾をプレハブ化します。
・ヒエラルキーウインドウのBulletをプロジェクトウインドウのPrefabsフォルダにドラッグします。ヒエラルキーウインドウのBulletは削除してください。
4-3.プレハブ用の弾オブジェクトを作成
・ヒエラルキーウインドウからCreate Emptyオブジェクトを作成して「BulletFactory」にリネームします。
・ヒエラルキーウインドウで「BulletFactory」を選択して、インスペクターウインドウのAdd Componentボタンを押して、虫眼鏡の入力欄にスクリプト名(ここでは「BulletFactoryScript」とします)を入力して、New Script>Create add Addをクリックします。
・プロジェクトウインドウにできたスクリプトはScriptsフォルダに入れておきましょう。
・「BulletFactoryScript」を編集して「public GameObject bullet;」のコードを追加したら、プレハブ「Bullet」をBulletFactoryのインスペクタウインドウの「Bullet」にドラッグします。
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にします。
これで弾は出るようになりましたが、人を動かしても同じところからしか弾が発射されません。
そんな時は、ヒエラルキーウインドウでPeopleにBulletFactoryをドラッグして子要素扱いにします。これで弾も人と一緒に移動するようになりました。
これで人オブジェクトも完成しました。
次回は当たり判定を作ってみます。
あと、色も同色で分かりにくいので色付けしたいと思います。
オブジェクト作った段階で色付けすれば良かったですね。