(Unity)自動ドアを作成する

*プレーヤーがドアに近づくと、自動的にドアが開くものを作成します。

(1)準備

  • プレーヤーとドアを作成する。

(2)スクリプトの作成

  • 新規にC#スクリプトを作成
  • 名前を「DoorMove」に変更
  • 下記のコードを書いてチェック

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

public class DoorMove : MonoBehaviour
{
    private Vector3 pos;
    private bool stopKey = false;

    void Update()
    {
        pos = transform.position;

        if(!stopKey)
        {
            // ドアを上方に動かす。
            transform.Translate(0, 0.01f, 0);
        }

        // ドアが指定した高さを超えたらストップさせる。
        if(pos.y > 3f)
        {
            stopKey = true;
        }
    }
}

(3)設定&再生

  • スクリプトをDoorオブジェクトに追加する。
  • ゲームを再生して確認
  • ドアが上方に移動してストップすれば成功です。

 

(4)センサーの作成

  • 今回はOnTriggerEnter()を使って、プレーヤーがセンサーに触れたらドアが開くようにします。
  • Doorオブジェクを「複製」
  • 名前を「DoorOpen」に変更
  • 「DoorMove」のスクリプトは外すこと(ポイント)
  • 位置はDoorの手前に移動
  • 「MeshRenderer」のチェックを外して透明化
  • 「Is Trigger」にチェックを入れて通過できるようにする(ポイント)

 

(5)スクリプトの作成

  • 新規にC#スクリプトを作成
  • 名前を「DoorOpen」に変更
  • 下記のコードを書いてチェック

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

public class DoorOpen : MonoBehaviour
{
    public GameObject door;

    private void OnTriggerEnter(Collider other)
    {
        if(other.CompareTag("Player"))
        {
            // ドアを動かすスクリプトをオンの状態にする。
            door.GetComponent<DoorMove>().enabled = true;

            this.gameObject.SetActive(false);
        }
    }
}

(6)設定

  • スクリプトを「DoorOpen」オブジェクトに追加
  • 空欄に「Door」オブジェクトをドラッグ&ドロップ

 

  • 「Door」オブジェクトを選択
  • DoorMoveスクリプトのチェックを外してオフにする(重要ポイント)

  • 「Player」のタグを設定(条件)

 

(7)再生&確認

  • 設定が完了したらゲームを再生
  • センサーに触れた瞬間、ドアが開けば成功です。