*プレーヤーがドアに近づくと、自動的にドアが開くものを作成します。
(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)再生&確認
- 設定が完了したらゲームを再生
- センサーに触れた瞬間、ドアが開けば成功です。