【Unity】スペースキーで弾を発射する大砲(GameObject)を作成する方法
スペースキーで弾を発射する大砲(GameObject)を作る方法を紹介します。
完成動作
スペースキーを押下すると弾が発射される。
大砲(GameObject)を作成
1.例として以下のように組み合わせて砲台を作ります。
親:Launcher(赤いCube)
子:Muzzle(黄色いCylinder)Z軸の方向を向くようにする。
子:FiringPoint(空のGameObject)Muzzleの先端らへんに作成する。下の2番目の画像を参照


弾を作成
1.Sphereを作成して、"Bullet"という名前に変更する。
(わかりやすいようにMaterialで青色にしてます。弾の大きさは良い感じに変える。)

2."Bullet"にRigidBodyを付ける。(弾が飛ぶ動作をRigidBodyを使って実装するため。)

弾をPrefab化
1.作成した"Bullet"をAssetsにドラックアンドドロップして、Prefab化する。

2.Hierarchy欄のBulletを削除(or非表示)にする。
※非表示の場合は以下のように、チェックボックスの✔を外す。

※今回は削除した。

スペースキーで弾を発射するスクリプトを作成
1.FireBullet.csという名前のスクリプトを作成して、以下のコードを記載する。
using UnityEngine;
public class FireBullet : MonoBehaviour
{
[SerializeField]
[Tooltip("弾の発射場所")]
private GameObject firingPoint;
[SerializeField]
[Tooltip("弾")]
private GameObject bullet;
[SerializeField]
[Tooltip("弾の速さ")]
private float speed = 30f;
// Update is called once per frame
void Update()
{
// スペースキーが押されたかを判定
if (Input.GetKeyDown(KeyCode.Space))
{
// 弾を発射する
LauncherShot();
}
}
/// <summary>
/// 弾の発射
/// </summary>
private void LauncherShot()
{
// 弾を発射する場所を取得
Vector3 bulletPosition = firingPoint.transform.position;
// 上で取得した場所に、"bullet"のPrefabを出現させる
GameObject newBall = Instantiate(bullet, bulletPosition, transform.rotation);
// 出現させたボールのforward(z軸方向)
Vector3 direction = newBall.transform.forward;
// 弾の発射方向にnewBallのz方向(ローカル座標)を入れ、弾オブジェクトのrigidbodyに衝撃力を加える
newBall.GetComponent<Rigidbody>().AddForce(direction * speed, ForceMode.Impulse);
// 出現させたボールの名前を"bullet"に変更
newBall.name = bullet.name;
// 出現させたボールを0.8秒後に消す
Destroy(newBall, 0.8f);
}
}
スクリプトを弾を発射させたいブロック(GameObject)にアタッチ
1.FireBullet.csを弾を発射させたいブロック(Launcherオブジェクト)にアタッチする。


弾を発射させたいブロック(GameObject)にアタッチしたFireBulletの項目に値を設定
1.LauncherオブジェクトのInspectorタブの"Fire Bullet"コンポーネントの"Firing Point"にHierarchy欄のFiringPointオブジェクトをドラックアンドドロップして設定する。

2.LauncherオブジェクトのInspectorタブの"Fire Bullet"コンポーネントの"Bullet"にAssets欄の"Bullet"Prefabをドラックアンドドロップして設定する。

完成
これでスペースキーを押すと、弾が発射されるようになる。
ディスカッション
コメント一覧
まだ、コメントがありません