1階から2階へ上がり、2階から1階へ降りられるエレベーターを作成しましょう。
プレーヤーが床に乗れば上昇して、2階でストップ。
ふたたび床に乗れば、下降して1階で止まります。
関連記事:
行き帰りできるムービングウォーク
階段を上るオブジェクト移動(SimpleMove)
動く床の上で一緒に移動する
領域に入っている間と離れたときに発生
エリアに入れば自動で動く(ムービングウォーク)
乗れば上昇していく床
乗れば落下する床
床とエレベーターの作成
Cubeを作成し、名前をFirstFloorに変更。
サイズと位置を変更します。
FirstFloorを複製し、名前をElevatorに変更。
位置を変更します。
Elevatorをわかりやすくするために、黒のマテリアルをつけます。
FirstFloorを複製し、名前をSecondElevatorに変更。
サイズと位置を変更します。
このように配置されています。
プレーヤーの作成
Cubeを作成し、名前をPlayerに変更します。
位置を回転を、変更します。
わかりやすくするために、Playerにマテリアルカラーをつけます。
Playerにキャラクターコントローラーをつけます。
コンポーネントを追加 > 物理 > キャラクターコントローラー
当たり判定の作成
Cubeを作成して、名前をAreaに変更。
位置を変えて、トリガーにするにチェックを入れます。
Areaをドラッグ&ドロップで、Elevatorの中に入れ、親子関係を作ります。
Areaはこのように配置されています。
Areaを透明にしましょう。
マテリアルを作成し、Toumeiと名前をつけます。
Rendering ModeをFadeに変更。
アルベドから、Aの値を0にします。
Toumeiマテリアルを、Areaに追加します。
Areaのオブジェクトが透明に変わりました。
エレベーターのスクリプトを作成
ElevatorMove.csを作成し、Elevatorに追加します。
ElevatorMove.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 39 40 41 42 43 44 45 46 47 48 49 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ElevatorMove : MonoBehaviour { private Vector3 pos; public bool is2ndFloor; void Start() { is2ndFloor = false; } //2階へ上昇 public void MoveUp() { StartCoroutine("MoveUpStart"); } IEnumerator MoveUpStart() { while (pos.y < 3.0f) { pos = transform.position; transform.Translate(0, 0.02f, 0); yield return new WaitForSeconds(0.01f); } is2ndFloor = true; } //1階へ下降 public void MoveDown() { StartCoroutine("MoveDownStart"); } IEnumerator MoveDownStart() { while (pos.y > 0.0f) { pos = transform.position; transform.Translate(0, -0.02f, 0); yield return new WaitForSeconds(0.01f); } is2ndFloor = false; } } |
プレーヤーのスクリプトを作成
次は、プレーヤーのスクリプトを作成しましょう。
今回は、キャラクターコントローラーを使って、動かせるようにします。
PlayerMove.csを作成し、Playerに追加します。
PlayerMove.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMove : MonoBehaviour { public GameObject elevator; private float speed = 3.0F; private float rotateSpeed = 3.0F; void Update() { CharacterController controller = GetComponent<CharacterController>(); transform.Rotate(0, Input.GetAxis("Horizontal") * rotateSpeed, 0); Vector3 forward = transform.TransformDirection(Vector3.forward); float curSpeed = speed * Input.GetAxis("Vertical"); controller.SimpleMove(forward * curSpeed); } private void OnTriggerEnter(Collider other) { if (other.gameObject.name == "Area") { if(elevator.GetComponent<ElevatorMove>().is2ndFloor == false) { elevator.GetComponent<ElevatorMove>().MoveUp(); } if(elevator.GetComponent<ElevatorMove>().is2ndFloor == true) { elevator.GetComponent<ElevatorMove>().MoveDown(); } } } } |
Playerを選択し、Elevatorフィールドの中に、Elevatorオブジェクトを入れます。
ゲームプレイして、Playerを動かしましょう。
黒の床に乗れば2階へ上がり、もう一度乗れば、1階へ降りていきます。
エレベーターの仕組みが出来上がりました。
関連記事:
行き帰りできるムービングウォーク
階段を上るオブジェクト移動(SimpleMove)
動く床の上で一緒に移動する
領域に入っている間と離れたときに発生
エリアに入れば自動で動く(ムービングウォーク)
乗れば上昇していく床
乗れば落下する床