今回は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; } }
床に乗った状態で、下矢印キーを押すとプレイヤーが下にすり抜けます。
下記の様な感じですね。