敵からプレーヤーに向かって、弾を発射するしくみをつくってみましょう。
敵の向きは常にプレーヤーにセットされいて、1秒おきにボールが発射されます。
3Dシューティングや、ミサイルを使ったゲームなど、幅広く活用できそうですね。
関連記事:
自機狙いに誤差をつける
ボールをキャッチして投げ返す
キャラクターコントローラーに発射機能
3D空間でプレーヤーを追いかけるオブジェクト
空間の中でクリックした位置へ行く
常にプレーヤーの方を向くオブジェクト
マウスカーソルの方へ向ける
オブジェクトの用意
ある程度の距離を取って、2つのオブジェクトを用意しました。
青色がPlayer、赤色がEnemyです。
ボールのPrefabデータをつくり、リジッドボディを追加します。
UseGravity(重力を使用)はチェックを外しています。
自機狙いの発射スクリプト(3D)
EnemyShot.csを作成し、Enemyに追加します。
EnemyShot.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class EnemyShot : MonoBehaviour { [SerializeField] GameObject player; [SerializeField] GameObject ball; private float ballSpeed = 10.0f; private float time = 1.0f; void Update() { transform.LookAt(player.transform); time -= Time.deltaTime; if(time <= 0) { BallShot(); time = 1.0f; } } void BallShot() { GameObject shotObj = Instantiate(ball, transform.position, Quaternion.identity); shotObj.GetComponent<Rigidbody>().velocity = transform.forward * ballSpeed; } } |
タイマーが0秒になれば弾を生成して、1秒おきに発射しています。
敵の向いている方向は、常にプレーヤーにロックオンしています。
PlayerフィールドにはPlayerオブジェクト、Ballフィールドには、Ballのプレハブを入れましょう。
プレイして動きを確認します。
1秒間隔で、プレーヤーを狙って弾を撃っています。
プレーヤーを動かす
ここまで、自機狙いのしくみは出来あがりました。
あとはプレーヤーを動かせるようにしましょう。
PlayerMove.csを作成し、Playerに追加。
PlayerMove.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMove : MonoBehaviour { private float speed = 5.0f; void Update() { if (Input.GetKey ("up")){ transform.position += transform.up * speed * Time.deltaTime; } if (Input.GetKey ("down")){ transform.position -= transform.up * speed * Time.deltaTime; } if (Input.GetKey("right")){ transform.position += transform.right * speed * Time.deltaTime; } if (Input.GetKey ("left")){ transform.position -= transform.right * speed * Time.deltaTime; } } } |
プレイしてみましょう。
プレーヤーに向けたボール発射が完成しました。
関連記事:
自機狙いに誤差をつける
ボールをキャッチして投げ返す
キャラクターコントローラーに発射機能
3D空間でプレーヤーを追いかけるオブジェクト
空間の中でクリックした位置へ行く
常にプレーヤーの方を向くオブジェクト
マウスカーソルの方へ向ける