【Unity】自分に向かってくる敵の作り方(2D)

Unity-自分に向かってくる敵の作り方(2D) Unity
スポンサーリンク

今回は2Dゲームでプレイヤーに向かって移動してくる敵(自機狙い)の敵を作る方法について書いていきます。
※Rigidbody2Dを使用した方法になります。

自機狙いの敵の実装方法

Rigidbody2Dを使用した実装方法で、「AddForce」を使うパターンと「velocity」を使うパターンを紹介します。

①AddForceを使う方法

スクリプト

AddForceを使ったサンプルです。

using UnityEngine;
public class EnemyMove : MonoBehaviour
{
    private Rigidbody2D rb2d;
    public GameObject player;
    public float speed;
    public float limit;
    void Start()
    {
        rb2d = GetComponent<Rigidbody2D>();
    }
    void FixedUpdate()
    {
        // 「対象の座標 - 自分の座標」で目的方向を出す
        Vector3 pos = player.transform.position - transform.position;
        // 正規化したものに移動速度をかけてAddForce
        rb2d.AddForce(pos.normalized * speed);
        // 制限速度を超えたら減速する
        if (rb2d.velocity.magnitude > limit)
        {
            rb2d.velocity = new Vector2(rb2d.velocity.x / 1.1f, rb2d.velocity.y / 1.1f);
        }
    }
}

加速しすぎてしまうのを防ぐため、velocityを変えて減速するようにしています。
※「1.1f」の数字を大きくするともっと強く速度を落とせますが、大きくし過ぎるとガクガクして不自然な感じになります。

実行するとこんな感じになります。(四角:プレイヤー、三角:敵)
スクリプトは赤い三角のオブジェクトにアタッチしています。
フワフワとついてくる感じなのでホーミングミサイルとかの動きに使えそうです(*’ω’*)

パラメータは「Speed=10」「Limit=5」で動かしてみました

②velocityを使う方法

スクリプト

velocityを使ったサンプルです。

using UnityEngine;
public class EnemyMove : MonoBehaviour
{
    private Rigidbody2D rb2d;
    public GameObject player;
    public float speed;
    void Start()
    {
        rb2d = GetComponent<Rigidbody2D>();
    }
    void FixedUpdate()
    {
        // 「対象の座標 - 自分の座標」で目的方向を出す
        Vector3 pos = player.transform.position - transform.position;
        // x、yに移動速度をかける
        rb2d.velocity = new Vector2(pos.x * speed, pos.y * speed);
    }
}

目的方向を出す部分はAddForceの時と同じですね。
その後は移動速度をかけたものをvelocityに入れるだけです。

実行するとこんな感じになります。
プレイヤーの場所へ突っ込んできます。
もう少しスピードの調整が必要ですが、自機に体当たりしてくるタイプの敵の動きで使えそうです。

パラメータは「Speed=3」で動かしてみました

おまけ:プレイヤーの方向を向くようにする

敵の向いている方向を分かりやすくしてみました。
以下を追加して向きを変更してあげるとできます。

transform.rotation = Quaternion.FromToRotation(Vector3.up, pos);
分かりやすいように形を細長くしました

コメント

タイトルとURLをコピーしました