【Unity】2Dアクションゲームでプレイヤーと一緒に動く床の作り方!

【PR スプリングセール開催中】

Unityアセットストアで、5月9日0時まで多数の人気アセットが50%オフで販売されています!この機会に手に入れましょう!
50%オフのアセットはこちら

プレイヤーが動く床に乗っても落ちないようにする方法について紹介します!

事前準備

ステージやキャラクターの準備や、動く床の作り方についてはこちらをご覧ください。

プレイヤーを床と一緒に動かす方法

現状では、プレイヤーが動く床の上に乗ってもそのまま落ちてしまいます。動かすには、さらにスクリプトを追加する必要があります。

プレイヤーが床と一緒に動くスクリプト

新しく以下のスクリプトを作成して、動く床にアタッチします。

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

public class StickyPlatform : MonoBehaviour
{
    // 床に衝突したときに実行
    private void OnCollisionEnter2D(Collision2D collision)
    {
        // 衝突したオブジェクト名がPlayerなら、床の子オブジェクトにする
        if(collision.gameObject.name == "Player")
        {
            collision.gameObject.transform.SetParent(transform);
        }
    }

    // 床から離れたときに実行
    private void OnCollisionExit2D(Collision2D collision)
    {
        // 衝突したオブジェクト名がPlayerなら、床の子オブジェクトから解除する
        if (collision.gameObject.name == "Player")
        {
            collision.gameObject.transform.SetParent(null);
        }
    }
}

プレイヤーのオブジェクト名がPlayerとなっていることを確認します。

実行

床の上に乗ることができました!しかし、床の側面に当たると床にくっついてしまってしまっています。

これは床の上側だけでなく、側面にも判定があることが原因です。そこで、上側だけに衝突判定があるように改良しましょう。

プレイヤーを床と一緒に動かす方法 改良版

床の上側に衝突判定用コライダーの追加

動く床にもう一つBox Collider 2Dコンポーネントを追加して、Is Triggerにチェックを入れておきます。

OffsetSizeを調整して、床の上側に配置します。

あとは、床の上側のコライダー内に入ったときに、床と一緒に動くようにスクリプトを変更します。

スクリプト変更

OnCollisionEnter2D、OnCollisionExit2Dから、OnTriggerEnter2DOnTriggerExit2Dに変更します。

これで、IsTriggerにチェックをつけたコライダーにのみ衝突判定が行われるようになります。

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

public class StickyPlatform : MonoBehaviour
{

    // 床の上側コライダーの中に入ったときに実行
    private void OnTriggerEnter2D(Collider2D collision)
    {
        // 衝突したオブジェクト名がPlayerなら、床の子オブジェクトにする
        if (collision.gameObject.name == "Player")
        {
            collision.gameObject.transform.SetParent(transform);
        }
    }

    // 床の上側コライダーから離れたときに実行
    private void OnTriggerExit2D(Collider2D collision)
    {
        // 衝突したオブジェクト名がPlayerなら、床の子オブジェクトから解除する
        if (collision.gameObject.name == "Player")
        {
            collision.gameObject.transform.SetParent(null);
        }
    }
}

改良版の実行結果

床の側面に当たっても、床にくっつかなくなりました!

まとめ

ポイントをまとめます。

  • 動く床の衝突判定用のコライダーを作成して、上側に配置する
  • OnTriggerEnter2DOnTriggerExit2Dを使用して衝突判定をする
  • プレイヤーを床の子オブジェクトにすることで、一緒に動かせる

動く床も含め、2Dアクションゲームが簡単に作れるアセットはこちらです。

Corgi Engine – 2D + 2.5D Platformer

参考動画

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