【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をドラックアンドドロップして設定する。
完成
これでスペースキーを押すと、弾が発射されるようになる。
ディスカッション
コメント一覧
I am sure this paragraph has touched all the internet viewers, its really really pleasant piece of writing on building up new website.
Your method of telling all in this paragraph is genuinely nice, every one
be capable of effortlessly know it, Thanks a lot.