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初心者なので、やってみないとわかりませんが…)


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

Unityでゲーム作成②_バイパー

今回はバイパー(変化弾)の作成に着手しました。 

 

前回の アステロイドを流用し、わかりやすいように色だけ変えます。

physx.hatenablog.com

 f:id:physx:20210716212943p:plain
そして曲がる用のスクリプトをアタッチ

Rigidbody rb;


void Start()
{
     rb = GetComponent<Rigidbody>();
}

void Update()
{
     if (Input.GetMouseButtonDown(0))
     {
     rb.velocity = Vector3.zero;
     rb.AddForce(-transform.right * 100, ForceMode.Impulse);
     }
     if (Input.GetMouseButtonDown(1))
    {
    rb.velocity = Vector3.zero;
    rb.AddForce(transform.right * 100, ForceMode.Impulse);
    }
}

バイパーを発射後、右クリックで右に、左クリックで左に進むようになっています。
 

さらに前回使用した発射スクリプト

右クリック→バイパーを発射

左クリック→アステロイドを発射

と書き換えました。

 

そしてバイパーに上記のスクリプトをアタッチすることで準備完了。
f:id:physx:20210716214818p:plain

ゲームを実行し右クリックと左クリックを繰り返すことで、画面内でバイパーが右と左を行き来する様子が見えます。

しかし弾の寿命を設定していないので、左クリック時のアステロイドや前に撃ったバイパーも見えています。

 

課題としては

・Destroy()で寿命を設定し、弾が消えるまで次弾を撃てないようにする。

・クリックやキーで曲げるのではなく、作中のようにいくつか軌道を設定したものを実装する

でしょうか。1番目はともかく2番目は時間もかかって非常に難しそうです。

次はハウンドに挑戦したいと思います。

Unityでゲーム作成①_アステロイド

Unity 3Dの勉強のためワールドトリガーのゲーム作成に着手しました。

基礎の部分から少しずつ進めていこうと思います。

 

今回は通常弾アステロイド、27(3×3×3)分割にしてみました。

f:id:physx:20210715231132p:plain

 

 

 

そしてクリックで発射するスクリプトをアタッチします

このスクリプトは「FPS 弾 発射」等のキーワードで色々見つかりますし、入門書を参考にすれば自作もできます。

 

次に弾の軌跡をつけるため、キューブに"Trail Render"を追加

キューブのインスペクターウィンドウ(Inspector)から

コンポーネントを追加 >Effect(エフェクト)> Trail Render」でインスペクターウインドウに画像の設定が追加されます。

f:id:physx:20210716000002p:plain

詳しい説明は省きますが、時間や幅が軌跡の基本パラメーターです。ゲームを実行しながら調整するといいと思います。

 

気を付けるべきことは

・「ライティングのデータを自動設定」にチェックを入れる

・マテリアルを設定する

の2点です。これを忘れるとマテリアルよりも暗い色になったり、軌跡が紫色で表示されてしまいます。

 

 

完成したら、分割したトリオンキューブに見えるように27個のキューブの位置を調整します。

見た目それっぽいものが完成したら、空のオブジェクトを作成 し、 27個のキューブを空のオブジェクトの"子"に設定します。そして最初に使った、クリックで発射するスクリプトを親オブジェクトにアタッチすることで完了です。

 

ゲームを実行し、クリックするとこのようになりました。

f:id:physx:20210715232000p:plain

 

色味は少し違うかもしれませんが、アステロイドっぽいものを発射することはできました。 

アニメと同じ色にしたい場合は画像を拾ってきて、「マテリアル > アルベド(albedo)」からスポイトで設定する又はRGBの数値を取得して設定すればできるかもしれません。

 

今回はここで終わりです。

ちなみにこれだけやるのに数時間かかりました。もう少しスクリプトの書き方に慣れて、手早く完成できるようにしたいです。

 

次からは、このアステロイドに手を加えて、バイパーやメテオラ・ハウンドの作成に着手したいと思います。