(1)下準備(弾の設定)
- Sphereオブジェクトを1つ作成
- 名前を「Shell」に変更
- 大きさ、色は自由に設定
- 「Rigidbody」を追加(重要)
- 「Use Gravity」のチェックを外す(これでゆっくりでもまっすぐ飛ぶようになります)
- Shellを「プレハブ化」したら、HierarchyにあるShellオブジェクトは削除
(2)下準備(発射台の設定)
- 新規にCreate Emptyオブジェクトを作成
- 名前を「EnemyShot」に変更
- 場所は自由に設定
- これが発射台で、弾はここから発射されます。
(3)スクリプトの作成(その1)
<Update関数の特性を活用する方法>
- 新規にC#スクリプトを作成
- 名前を「EnemyShot」に変更
- 下記のコードを書いてチェック
using System.Collections; using System.Collections.Generic; using UnityEngine; public class EnemyShot : MonoBehaviour { public GameObject shellPrefab; public AudioClip sound; private int count; void Update() { count += 1; // (ポイント) // 60フレームごとに砲弾を発射する if(count % 60 == 0) { GameObject shell = Instantiate(shellPrefab, transform.position, Quaternion.identity); Rigidbody shellRb = shell.GetComponent<Rigidbody>(); // 弾速は自由に設定 shellRb.AddForce(transform.forward * 500); // 発射音を出す AudioSource.PlayClipAtPoint(sound, transform.position); // 5秒後に砲弾を破壊する Destroy(shell, 5.0f); } } }
(4)設定
- スクリプトを発射台のオブジェクトに追加
- 「プレハブ」と「効果音」を設定
- 設定が完了したらゲーム再生
- 一定間隔で砲弾が発射されれば成功です。
(5)スクリプトの作成(その2)
<InvokeRepeatingメソッドを活用する方法>
- 新規にC#スクリプトを作成
- 名前を「EnemyShot2」に変更
- 下記のコードを書いてチェック
using System.Collections; using System.Collections.Generic; using UnityEngine; public class EnemyShot2 : MonoBehaviour { public GameObject shellPrefab; public AudioClip sound; void Start() { // 指定したメソッドを、指定した時間(単位;秒)から、指定した間隔(単位;秒)で繰り返し実行する。 InvokeRepeating("Shot", 0f, 1f); } void Shot() { GameObject shell = Instantiate(shellPrefab, transform.position, Quaternion.identity); Rigidbody shellRb = shell.GetComponent<Rigidbody>(); // 弾速は自由に設定 shellRb.AddForce(transform.forward * 500); // 発射音を出す AudioSource.PlayClipAtPoint(sound, transform.position); // 5秒後に砲弾を破壊する Destroy(shell, 5.0f); } }
(6)設定
- スクリプトを発射台のオブジェクトに追加
- 「プレハブ」と「効果音」を設定
- 「EnemyShot」コンポーネントは「オフ」にする(ポイント)
- 設定が完了したらゲーム再生
- 一定間隔で砲弾が発射されれば成功です。