パスワードを入力すれば開くドアを作成してみましょう。
プレーヤーがドアに触れたら、入力フィールドが出現。
パスワードが合致するとドアが開き、1秒後に閉まります。
ドア側のスクリプト
PlaneとCubeを作成し、Cubeの位置とサイズを変更します。
Cubeの名前をDoorに変更し、色をつけます。
シーンビューではこのように配置されています。
空のオブジェクトを作成します。
GameObjectをDoorManageという名前に変更。
位置を1にして、Doorに右端まで持ってきます。
DoorManageの位置は、このように右端に配置されています。
DoorManageの中にDoorを入れて、親子関係をつくります。
DoorOpen.csを作成し、DoorManageに追加します。
DoorOpen.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class DoorOpen : MonoBehaviour { public void DoorMove() { StartCoroutine("DoorRotate"); } IEnumerator DoorRotate() { for (int turn=0; turn<90; turn++) { transform.Rotate(0,1,0); yield return new WaitForSeconds(0.01f); } yield return new WaitForSeconds(1.0f); for (int turn=0; turn<90; turn++) { transform.Rotate(0,-1,0); yield return new WaitForSeconds(0.01f); } } } |
入力フィールドの作成
入力フィールドを作成します。
UI > InputField
InputFieldの位置を変更し、中央下に配置します。
ゲームビューではこのように配置されています。
プレーヤー側のスクリプト
次に、プレーヤーとしてCubeを作成して、位置を変更します。
判別しやすいように、Cubeに色をつけます。
Cubeにリジッドボディを追加します。
CubeMove.csを作成し、Cubeに追加します。
CubeMove.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class CubeMove : MonoBehaviour { public InputField inputField; public GameObject door; public GameObject fieldObject; void Start() { fieldObject.SetActive(false); } void Update() { float dx = Input.GetAxis("Horizontal") * Time.deltaTime * 3.0f; float dz = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f; transform.position = new Vector3 ( transform.position.x + dx, transform.position.y, transform.position.z + dz ); } private void OnCollisionEnter(Collision collision) { if (collision.gameObject.name == "Door" ) fieldObject.SetActive(true); } public void InputPass(){ if ( inputField.text == "1234") door.GetComponent<DoorOpen>().DoorMove(); fieldObject.SetActive(false); } } |
InputFieldを扱いますので、4行目 using UnityEngine.UI; を忘れずに書いておきましょう。
各フィールドに、それぞれオブジェクトを入れます。
inputFieldはテキスト入力に使用。
fieldObjectは入力フィールドの表示、非表示のために使用します。
入力フィールドの設定
続いて、InputPass()を実行するために、入力フィールドの設定を行います。
InputFieldを選択し、入力完了時の項目を、以下のような手順で設定します。
これで、テキストを入力してEnterを押したタイミングで、CubeMove.csのInputPass()が実行されます。
ゲームプレイしてみましょう。
扉に触れたら、パスワード入力欄が出現。
パスワード1234を入力してEnterを押せば扉が開き、1秒後に閉まります。