すり抜ける床を簡単に作成-PlatformEffector-【Unityゲーム作成】

今回はUnityの2Dゲームで「すり抜ける床」を簡単に実装してみます。

プレイヤーが床下からジャンプすると頭をぶつけずに、すり抜けて床に乗る感じですね。アクションゲームにありがちな機能ですね。

はじめに

Unityのバージョンは2021.3.14f1です。

PlatformEffectorを利用して簡単に作成していきます。すり抜ける床を実装しますが、床に関する挙動を制御することが出来ます。

実装開始

UI作成→スクリプト作成の順番で行います。

プレイヤーと地面の作成

Hierarchyで右クリックし「2DObject」→「Sprites」→「Square」を選択、2つ作成します。

一つはPlayerとして、BoxCollider2D、Rigidbody2D、Playerスクリプトをアタッチします。

Playerスクリプトの中身は下記にします。横移動とスペースキーでジャンプができるようになります。

using UnityEngine;

public class Player : MonoBehaviour
{
    private float _Speed = 5.0f;
    private float _JumpPower = 10.0f;
    private Rigidbody2D _rb;

    private void Awake()
    {
        _rb = GetComponent<Rigidbody2D>();
    }
    void Update()
    {
        float inputX = Input.GetAxisRaw("Horizontal");

        if (Input.GetKey(KeyCode.Space) && _rb.velocity.y == 0)
        {
            _rb.velocity = new Vector2(_rb.velocity.x, _JumpPower);
        }
        _rb.velocity = new Vector2(inputX * _Speed, _rb.velocity.y);
    }
}

もう一つはGroundとし、スケール、色を変更。BoxCollider2Dをアタッチします。

実行してみて、横移動、ジャンプができればOK。

床を作成

Hierarchyで右クリックし「2DObject」→「Sprites」→「Square」を更に2つ追加します。

一つは「NormalFloor」と言う名前にし、スケールを変更、BoxCollider2Dをアタッチ。

もう一つは「ThroughFloor」と言う名前にしスケール、色を変更、BoxCollider2Dをアタッチします。

実行すると下記のような感じに。BoxColliderをセットしてあるので、下からジャンプするとぶつかり、上から乗ることが出来ます。

プラットフォームエフェクトを追加

すり抜ける床にしたいオブジェクトにPlatformEffector2Dをアタッチ、BoxCollider2Dの「UsedByEffector」にチェックを入れます。

シーンビューを見ると半円状に衝突範囲が表示されます。この半円がコライダーの動作判定になります。上からオブジェクトが来た場合はぶつかり、下からの場合は反応しないです。

実際に動かしてみて下記の様に、下からはすり抜けて、上からは抜けなければOK

「RotationalOffset」を180にすると、逆の動作となり、上からすり抜けます。

これを利用する形で、下記スクリプトを作成してThroughFloorにアタッチ。

using UnityEngine;

public class ThroughFloor : MonoBehaviour
{

    private PlatformEffector2D _platformEffector;

    void Awake()
    {
        _platformEffector = GetComponent<PlatformEffector2D>();
    }

    void Update()
    {
        if (Input.GetKey(KeyCode.DownArrow))
            _platformEffector.rotationalOffset = 180f;
        if (Input.GetKey(KeyCode.Space))
            _platformEffector.rotationalOffset = 0f;
    }
}

床に乗った状態で、下矢印キーを押すとプレイヤーが下にすり抜けます。

下記の様な感じですね。

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