(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」コンポーネントは「オフ」にする(ポイント)

- 設定が完了したらゲーム再生
- 一定間隔で砲弾が発射されれば成功です。
