他のオブジェクトにぶつかれば、プレーヤー操作が不可になるように、スクリプトで制御してみましょう。
往復しているCubeに触れれば、Sphere(プレーヤー)のキー操作が無効になって、動かなくなります。
関連記事:
OnCollisionEnterとOnTriggerEnterの違い
領域に入っている間と離れたときに発生
オブジェクトから離れるとイベント発生
触れている間はイベントを発生させる
十字キー操作を不可にする
CubeとSphereを作成します。
CubeのXを-5に、SphereのZを-5にして、位置を変更します。
Sphereにリジッドボディを追加してUseGravityのチェックを外し、トリガーにするにチェックを入れます。
まずは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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeMove : MonoBehaviour { int counter = 0; float move = 0.05f; void Update() { Vector3 p = new Vector3(move, 0, 0); transform.Translate(p); counter++; if (counter == 100) { counter = 0; move *= -1; } } } |
これで、Cubeが往復運動します。
続いて、Sphereのスクリプトをつくります。
Sphere.csを作成し、Sphereに追加します。
Sphere.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SphereMove : MonoBehaviour { public bool isTouch; void Start() { isTouch = false; } void Update() { if(!isTouch) { float dx = Input.GetAxis("Horizontal") * Time.deltaTime * 3; float dz = Input.GetAxis("Vertical") * Time.deltaTime * 3; transform.position = new Vector3 (transform.position.x + dx, 0, transform.position.z + dz); } } private void OnTriggerEnter(Collider other) { if (other.gameObject.name == "Cube" ) { isTouch = true; } } } |
ゲームプレイして、Cubeにぶつかってみましょう。
キー操作が不可になり、Sphereを動かせなくなります。
isTouchのフラグをつくり、Cubeの当たったタイミングで、trueに。
キー操作できるのは、if(!isTouch)ということで、条件設定をfalseにしています。
関連記事:
OnCollisionEnterとOnTriggerEnterの違い
領域に入っている間と離れたときに発生
オブジェクトから離れるとイベント発生
触れている間はイベントを発生させる