他のオブジェクトに触れると、プレーヤーの動きをn秒間停止させるように、スクリプトを作ってみましょう。
十字キーでCubeを操作しますが、飛んできたボールにぶつかると、2秒間動かすことができません。
2秒経過した後は、また動かせるようになります。
関連記事:
Invokeを使ってn秒後に関数を実行する
相手が動いている間、プレーヤーを動けなくする
数秒後にオブジェクトを出現させる
コルーチンを使って1秒後にテキストを消す
触れた相手をn秒後に削除する
乗ったオブジェクトをn秒後に消す
動きが止まればn秒後に呼び出す
デリゲートを使ってn秒後に実行
触れるとn秒間だけ停止してテキスト表示
1秒経過しなければクリックで実行できない
プレーヤーの作成
Cubeを作成し、Z方向を動かして手前に配置します。
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 39 40 41 42 43 44 45 46 47 48 49 50 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeMove : MonoBehaviour { private float speed = 5.0f; private bool isStop; void Start() { isStop = false; GetComponent<Renderer>().material.color = Color.green; } void Update() { if(!isStop) { if (Input.GetKey (KeyCode.UpArrow)) { transform.position += transform.up * speed * Time.deltaTime; } if (Input.GetKey (KeyCode.DownArrow)) { transform.position -= transform.up * speed * Time.deltaTime; } if (Input.GetKey(KeyCode.RightArrow)) { transform.position += transform.right * speed * Time.deltaTime; } if (Input.GetKey (KeyCode.LeftArrow)) { transform.position -= transform.right * speed * Time.deltaTime; } } } void OnCollisionEnter(Collision col) { if (col.gameObject.tag == "Ball") { isStop = true; GetComponent<Renderer>().material.color = Color.red; Invoke("CubeStop", 2.0f); } } void CubeStop() { isStop = false; GetComponent<Renderer>().material.color = Color.green; } } |
Ballタグのオブジェクトにぶつかれば、色が変わって、isStopのフラグがtrueになるようにします。
触れた後にn秒間停止させる
空のオブジェクトを作成し、座標を変えます。
BallShot.csを作成し、GameObjectに追加します。
BallShot.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallShot : MonoBehaviour { public GameObject prefab; private float time; void Start() { time = 0; } void Update() { time -= Time.deltaTime; if(time <= 0.0f) { GameObject ball = GameObject.Instantiate (prefab,transform.position,transform.rotation)as GameObject; ball.GetComponent<Rigidbody>().AddForce(transform.forward * -1000); time = 3.0f; } } } |
Sphereを作成し、リジッドボディを追加。
Ballという名前でタグを作成します。
Sphereをプロジェクトビューにドラッグ&ドロップし、プレハブ化します。
Sphereの元データは削除しておきます。
GameObjectを選択し、プレハブのフィールドに、Sphereを入れます。
ゲームプレイしてみましょう。
通常時はグリーン、ぶつかるとレッドに変色し、2秒間停止。
停止後はまた元のように動かせるようになります。
関連記事:
Invokeを使ってn秒後に関数を実行する
相手が動いている間、プレーヤーを動けなくする
数秒後にオブジェクトを出現させる
コルーチンを使って1秒後にテキストを消す
触れた相手をn秒後に削除する
乗ったオブジェクトをn秒後に消す
動きが止まればn秒後に呼び出す
デリゲートを使ってn秒後に実行
触れるとn秒間だけ停止してテキスト表示
1秒経過しなければクリックで実行できない