【Unityゲーム作成①】プロトタイプ編 ~ プレイヤー作成 part3 ~


今回の内容


プレイヤー作成の第3回目です。
壁に当たったときに反転する処理を作成します。

※初めての方はこちらから
【第1回記事】この連載について

★前回までのソースコード
GitHub

タグの設定


壁に当たったときに反転する処理を、以下の方針で作成します。

・壁にタグ「Wall」を設定
・プレイヤーが当たった対象のタグが「Wall」なら、逆方向を向く

まずはタグの設定ですが、
「Wall」プレハブのインスペクタービューで、タグの設定を「Wall」にします。
先に、Add Tag で「Wall」を追加した上で、設定しましょう。

タグの設定は、これで完了です。

コリジョン判定と反転処理の追加


タグが設定できたので、プレイヤーと壁の衝突判定、およびその際に反転させる処理を追加します。
衝突判定には「OnCollisionStay メソッド」を使っています。

※OnCollisionEnter でも概ね問題無いのですが、他のイベントとの兼ね合いで反転が効かずに壁に進み続けるケースがあり、その対策として Stay を使いました。

PlayerScript に以下を追加してください。
turnメソッドでプレイヤーの向きを反転させています。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerScript : MonoBehaviour
{
    Animator charaAnim;

    public bool isMove;

    void Start()
    {
        charaAnim = GetComponent<Animator>();
    }

    void FixedUpdate()
    {
        if (isMove)
        {
            transform.position += transform.forward * 0.03f;
        }
    }

    void Update()
    {
        charaAnim.SetBool("isRunning", isMove);
    }

    private void OnCollisionStay(Collision collision)
    {
        switch (collision.gameObject.tag)
        {
            case "Wall":
                if (isMove) turn();
                break;
        }
    }

    // プレイヤーの向きを反転
    public void turn()
    {
        transform.Rotate(new Vector3(0, 180, 0));
    }
}

OnCollisionStayメソッドは、コリジョンを持つ他のオブジェクトと接触している間、1フレームごとに実行されます。
引数の Collision型のオブジェクトから接触しているオブジェクトの情報を取得することができます。

ここではタグ情報を取得し、「Wall」と一致した場合にプレイヤーの向きを反転する処理を実装しています。
反転処理は今後も他の箇所から呼び出す想定のため、public のメソッドとして実装しました。

※タグの使用場面
特定の種類のオブジェクトを識別したい時に使います。
今回で言うと、壁(Wall)をタグによって識別しており、左の壁でも右の壁でも同様のオブジェクトとして判定、処理することが可能となっています。

ちなみに、タグの判定は CompareTagメソッド を使った方が速いようです。
せっかくなので CompareTag バージョンを載せておくと、以下のような感じです。
※記事内では元のソースコードに合わせて、switchの実装を採用していきます。

    private void OnCollisionStay(Collision collision)
    {
        if (collision.gameObject.CompareTag("Wall"))
        {
            if (isMove) turn();
        }
    }

(コリジョン関連記事)
【Unity連載】当たり判定の取り方①(ぶつかる編)
【Unity連載】当たり判定の取り方②(ぶつからない編)

完成したら、シーンを再生してみて下さい。
壁に当たったときに反転すれば成功です。

おわりに


今後もタグとコリジョンを使った処理を複数作成しますので、これらを組み合わせた処理のイメージを掴んでおきましょう。
プレイヤーの処理は他の様々な機能と関連してくるため今後も随時追加していきますが、大まかな実装は一旦今回で完了となります。

次回は、箱を作成しますのでお楽しみに!

★今回までのソースコード
GitHub


 

© Unity Technologies Japan/UCL

  • このエントリーをはてなブックマークに追加

PAGE TOP