【Unity】スペースキーで弾を発射する大砲を作成する方法
スペースキーで弾を発射する大砲(GameObject)を作る方法を紹介します。
完成動作
スペースキーを押下すると弾が発射される。
やり方(動画)
やり方(ブログ)
大砲(GameObject)を作成
1.例として以下のように組み合わせて砲台を作ります。
親:Launcher(赤いCube)
Launcherの子:Muzzle(黄色いCylinder)
Muzzleの子:FiringPoint(空のGameObject)Muzzleの先端らへんに作成する。下の2番目の画像を参照(実際にはFiringPointの場所から弾が生成されるようにする。
(Muzzleの子オブジェクトとすることで、LauncherやMuzzleの方向を変えても、ちゃんとMuzzleの向いている方向に弾が出るようにできる。)
弾を作成
1.Sphereを作成して、"Bullet"という名前に変更する。
(わかりやすいようにMaterialで青色にしてます。弾の大きさは良い感じに変える。)
2."Bullet"にRigidBodyを付ける。(弾が飛ぶ動作をRigidBodyを使って実装するため。)
弾をPrefab化
1.作成した"Bullet"をAssetsにドラックアンドドロップして、Prefab化する。
2.Hierarchy欄のBulletを削除にする。(スクリプト上から生成させるようにするため)
スペースキーで弾を発射するスクリプトを作成
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))
{
// 弾を発射する場所を取得
Vector3 bulletPosition = firingPoint.transform.position;
// 上で取得した場所に、"bullet"のPrefabを出現させる。Bulletの向きはMuzzleのローカル値と同じにする(3つ目の引数)
GameObject newBullet = Instantiate(bullet, bulletPosition, this.gameObject.transform.rotation);
// 出現させた弾のup(Y軸方向)を取得(MuzzleのローカルY軸方向のこと)
Vector3 direction = newBullet.transform.up;
// 弾の発射方向にnewBallのY方向(ローカル座標)を入れ、弾オブジェクトのrigidbodyに衝撃力を加える
newBullet.GetComponent<Rigidbody>().AddForce(direction * speed, ForceMode.Impulse);
// 出現させた弾の名前を"bullet"に変更
newBullet.name = bullet.name;
// 出現させた弾を0.8秒後に消す
Destroy(newBullet, 0.8f);
}
}
}
以下の画像の赤丸を"Local"に変えて、ゲームオブジェクトをクリックするとローカルの回転軸が見れる。
上記のスクリプトのMuzzleのローカルのY軸は赤矢印のところにある緑の矢印のことで、右を向いており、この方向に弾が飛ぶようにスクリプトでやっている。
スクリプトを弾を発射させたいブロック(GameObject)にアタッチ
1.FireBullet.csを弾を発射させたいブロック(Muzzleオブジェクト)にアタッチする。
弾を発射させたいブロック(GameObject)にアタッチしたFireBulletの項目に値を設定
1.MuzzleオブジェクトのInspectorタブの"Fire Bullet"コンポーネントの"Firing Point"にHierarchy欄のFiringPointオブジェクトをドラックアンドドロップして設定する。
2.MuzzleオブジェクトのInspectorタブの"Fire Bullet"コンポーネントの"Bullet"にAssets欄の"Bullet"Prefabをドラックアンドドロップして設定する。
完成
これでスペースキーを押すと、弾が発射されるようになる。
ディスカッション
コメント一覧
まだ、コメントがありません