- 特定のキーを押すとドアが左右に開く
- 別のキーを押すとドアが閉じる。
(スクリプトの作成)
<左ドア専用>
using System.Collections; using System.Collections.Generic; using UnityEngine; // 左ドア専用 public class DoorMove_L : MonoBehaviour { private int num = 0; public Vector3 targetPos1; public Vector3 targetPos2; void Update() { Vector3 pos = transform.position; if(Input.GetKeyDown(KeyCode.Y)) { num = -1; } else if(Input.GetKeyDown(KeyCode.U)) { num = 1; } // 「0」「1」「−1」を掛けることでドアの動きを制御する。 transform.Translate(num * transform.right * Time.deltaTime * 1.5f); // 指定した位置で止める。 if (pos.x < targetPos1.x) { // 0を掛けることで移動を停止する。 num = 0; pos.x = targetPos1.x; transform.position = pos; } if(pos.x > targetPos2.x) { num = 0; pos.x = targetPos2.x; transform.position = pos; } } }
<右ドア専用>
using System.Collections; using System.Collections.Generic; using UnityEngine; // 右ドア専用 public class DoorMove_R : MonoBehaviour { private int num = 0; public Vector3 targetPos1; public Vector3 targetPos2; void Update() { Vector3 pos = transform.position; if(Input.GetKeyDown(KeyCode.Y)) { num = 1; } else if(Input.GetKeyDown(KeyCode.U)) { num = -1; } transform.Translate(num * transform.right * Time.deltaTime * 1.5f); if(pos.x > targetPos1.x) { num = 0; pos.x = targetPos1.x; transform.position = pos; } if(pos.x < targetPos2.x) { num = 0; pos.x = targetPos2.x; transform.position = pos; } } }
(設定)
- 左右のドアオブジェクトに対応したスクリプトを追加する。
- ドアを止めたい位置(座標)を指定する。
- 設定が完了したらゲームを再生
- 「Y」ボタンでドアが左右に開く
- 「U」ボタンでドアが閉じれば成功です。
<<ホームドアのモジュール化>>
- モジュール化することで簡単に複製(量産)できるようになります。
(親子関係を使ってオブジェクトの改良)
(スクリプトの改良)
<左ドア専用>
using System.Collections; using System.Collections.Generic; using UnityEngine; // 左ドア2 public class DoorMove_L2 : MonoBehaviour { private int num = 0; private Vector3 targetPos1; private Vector3 targetPos2; void Start() { // このホームドアの最初の位置を取得する。 Vector3 initialPos = transform.position; // ドアをどこまで移動させるかを決める。 targetPos1.x = initialPos.x - 3; // ドアをどこに戻すかを決める。 targetPos2.x = initialPos.x; } void Update() { Vector3 pos = transform.position; if(Input.GetKeyDown(KeyCode.Y)) { num = -1; } else if(Input.GetKeyDown(KeyCode.U)) { num = 1; } // 「0」「1」「−1」を掛けることでドアの動きを制御する。 transform.Translate(num * transform.right * Time.deltaTime * 1.5f); // 指定した位置で止める。 if(pos.x < targetPos1.x) { // 0を掛けることで移動を停止する。 num = 0; pos.x = targetPos1.x; transform.position = pos; } if(pos.x > targetPos2.x) { num = 0; pos.x = targetPos2.x; transform.position = pos; } } }
<右ドア専用>
using System.Collections; using System.Collections.Generic; using UnityEngine; // 右ドア2 public class DoorMove_R2 : MonoBehaviour { private int num = 0; private Vector3 targetPos1; private Vector3 targetPos2; private void Start() { Vector3 initialPos = transform.position; targetPos1.x = initialPos.x + 3; targetPos2.x = initialPos.x; } void Update() { Vector3 pos = transform.position; if (Input.GetKeyDown(KeyCode.Y)) { num = 1; } else if (Input.GetKeyDown(KeyCode.U)) { num = -1; } transform.Translate(num * transform.right * Time.deltaTime * 1.5f); if (pos.x > targetPos1.x) { num = 0; pos.x = targetPos1.x; transform.position = pos; } if (pos.x < targetPos2.x) { num = 0; pos.x = targetPos2.x; transform.position = pos; } } }
(実行結果)
- ホームドアを複製して確認してみましょう。