Unityでゲーム作成③_ハウンド

今回はハウンド(追尾弾)の作成に着手しました。 

前々回のアステロイドを流用し、色を緑にします。
physx.hatenablog.com
physx.hatenablog.com



f:id:physx:20210731200626p:plain

実装するスクリプトですが、
「ハウンドが当たり判定に触れる
→弾の速度を0にする
→"Enemy"タグをつけた中から最近接オブジェクトの座標を計算
→MoveTowardsで弾が向かっていく。」
という設計にしました。



敵は単純な直方体を用意し、本体のボックスコライダーとは別にカプセルコライダーを追加。これが"ハウンドの当たり判定"になります。
f:id:physx:20210731200826p:plain
半径を直方体よりも大きく設定し、「トリガーにする」にチェック。
そして、直方体に"Enemy"タグを新しく作って、設定します。


今回、最も近い敵を追うというスクリプトは以下のブログを参考にしました。
https://blog.beatdjam.com/entry/2014/10/22/032751

また、別のオブジェクトに近づく(追尾)のはMoveTowardsというのを使うと良いらしいです。
https://docs.unity3d.com/jp/current/ScriptReference/Vector3.MoveTowards.html


これらを用いて、完成したスクリプトは以下の通りです。

public class Haund : MonoBehaviour
{
    public float speed = 1.0f;
    private GameObject target;
    Rigidbody rb;
    // Start is called before the first frame update
    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    // Update is called once per frame
    void Update()
    {

    }

    void OnTriggerStay(Collider collider)
    {
        target = serchTag(gameObject, "Enemy");
        

        float step = speed * Time.deltaTime; // calculate distance to move
        transform.position = Vector3.MoveTowards(transform.position, target.transform.position, step);
    }

    void OnTriggerEnter(Collider collider)
    {
        if(collider.gameObject.tag == "Enemy")
        {
            rb.velocity = Vector3.zero; //弾の動きをいったん止める(速度を0にする)
        }
        
    }
}

(※serchTagは他の人が作成したスクリプトなので、上のリンクから見てください)

そして、このスクリプトをハウンドにアタッチし、発射スクリプトを改造。

・左クリック→アステロイド
・右クリック→バイパー
・数字の1キー→ハウンド

とし、実装を確認
f:id:physx:20210731203307p:plain
左のハウンドは当たり判定に触れずにまっすぐ進み、右のハウンドはタグで"Enemy"に設定した直方体に向かっています。


これでハウンドの実装は終了です。



ただ、寿命(Destroy)を設定しなかったので、撃ちすぎてパソコンが非常に重くなってしまいました。

あと追尾性能が良すぎるという問題もあります。

OnTriggerStay内の処理をOnTriggerEnterに書くと、当たり判定によってかわしやすい・かわしにくいが設定できるかもしれませんね。(まだUnity初心者なので、やってみないとわかりませんが…)


次回は、メテオラか近距離武器を実装したいと思います。