UnityでStaticイベントでドアを開けるプログラム

Staticイベントを使ってドアを開けるサンプルプログラムを書いてみましょう。実際にゲームで使われている様子を見ると参考にしやすいかも。Staticイベントがどんなものかについては下記リンクから確認してみてください

目次

ボタンを押したら扉が開く

ピンクの部分をドアが開くボタンとして、触れたら赤い扉が下がって通れるようになるものを作りたいとします。

スクリプト

今回のスクリプトは主に3つ、おまけでキャラクター用のスクリプトを1つ。

using UnityEngine;
using System;

public class EventManager : MonoBehaviour
{
    public static event Action OnDoorOpen;
    public static void DoorOpen()
    {
        OnDoorOpen?.Invoke();
    }
}
using UnityEngine;

public class Door : MonoBehaviour
{
    private Vector3 m_targetPosition;
    private bool m_bOpen = false;

    private void DoorOpen()
    {
        m_bOpen = true;
    }
    private void Start()
    {
        m_targetPosition = transform.position + Vector3.down * 5f;
    }

    private void Update()
    {
        if( m_bOpen)
        {
            transform.position = Vector3.MoveTowards(
                transform.position,
                m_targetPosition,
                10f * Time.deltaTime);
        }
    }

    private void OnEnable()
    {
        DoorEventManager.OnDoorOpen += DoorOpen;
    }
    private void OnDisable()
    {
        DoorEventManager.OnDoorOpen -= DoorOpen;
    }
}
using UnityEngine;

public class DoorTrigger : MonoBehaviour
{
    private void OnTriggerEnter2D(Collider2D _collision)
    {
        DoorEventManager.DoorOpen();
    }
}
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    void Update()
    {
        float fInputHorizontal = Input.GetAxisRaw("Horizontal");
        transform.Translate(fInputHorizontal * 3f * Time.deltaTime, 0f, 0f);
        if( 0 < fInputHorizontal)
        {
            transform.localScale = Vector3.one;
        }
        else if(fInputHorizontal < 0)
        {
            transform.localScale = new Vector3(-1f, 1f, 1f);
        }
        else { }
    }
}

Unity側のセットアップ

今回のサンプルを動かすには4つのオブジェクトに設定が必要になります。黒い床はおまけです。あると雰囲気が出ます

オブジェクトコンポーネントなど
EventManager空のゲームオブジェクトを作成
+EventManager
ドアスプライトQuad
+Door
ドアトリガー(ボタン)キャラの少し前に小さくスプライト
+DoorTrigger
+BoxCollider2D
BoxCollider2Dはトリガーモードに変更
IsTriggerにチェックを入れて下さい
キャラクター別に白い画像のままでも大丈夫
キャラはお好みで
+PlayerController
+Rigidbody2D
+BoxCollider2D
Rigidbody2D
>BodyType:Kinematic

動かして確認

キャラクターは左右キーもしくはADキーで移動させることができます。ドアトリガーに触れるとドアが下に下がるのが確認できると思います。

もしうまく行かない場合は以下の点を見直してみて下さい

  • ドアトリガーのIsTriggerにチェックが入っていない
  • キャラクターにRigidbody2Dがついていない
  • キャラクターにBoxCollider2Dがついていない
  • Collider系が2Dじゃないものが混ざっている
  • EventMangerのコンポーネントがシーン内に存在してない
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次