プレーヤーを操作している途中で、いったん動きをストップ。
ストップすれば、他のオブジェクトのプログラムが実行されるように、スクリプトを作成しましょう。
Cubeが動いてる間は何も起きませんが、停止すれば1秒後にボールが落下します。
関連記事:
Invokeを使ってn秒後に関数を実行する
相手が動いている間、プレーヤーを動けなくする
数秒後にオブジェクトを出現させる
コルーチンを使って1秒後にテキストを消す
触れた相手をn秒後に削除する
乗ったオブジェクトをn秒後に消す
ぶつかればn秒間ストップ
デリゲートを使ってn秒後に実行
出現してから1秒後に落下する
スタートから3秒後にプレーヤーを追いかける
停止すると他のスクリプトが実行
Plane、Cube、Sphereを作成します。
Sphereにはリジッドボディを追加し、座標を変えます。
マテリアルカラーを付けて、わかりやすくします。
ゲームビューではこのように見えています。
PlayerMove.csを作成し、Cubeに追加します。
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 37 38 39 40 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMove : MonoBehaviour { public bool isMove; public static PlayerMove instance; public void Awake() { if(instance == null) { instance = this; } } void Start() { isMove = false; } void Update() { float inputX = Input.GetAxis("Horizontal") * Time.deltaTime * 3.0f; float inputZ = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f; transform.position = new Vector3 ( transform.position.x + inputX, transform.position.y, transform.position.z + inputZ ); if(inputX!=0 || inputZ!=0) { isMove = true; } else { isMove = false; } } } |
BallDrop.csを作成し、Sphereに追加します。
BallDrop.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallDrop : MonoBehaviour { public float time; Rigidbody rb; void Start() { time = 1.0f; rb = GetComponent<Rigidbody>(); rb.isKinematic = true; } void Update() { if(PlayerMove.instance.isMove) { time = 1.0f; rb.isKinematic = true; } else { time -= Time.deltaTime; if(time <= 0) { rb.isKinematic = false; } } } } |
ゲームプレイして、Cubeを動かしましょう。
動きをやめれば、1秒後にSphereが落下。
再び動き出すと、落下はストップします。
関連記事:
Invokeを使ってn秒後に関数を実行する
相手が動いている間、プレーヤーを動けなくする
数秒後にオブジェクトを出現させる
コルーチンを使って1秒後にテキストを消す
触れた相手をn秒後に削除する
乗ったオブジェクトをn秒後に消す
ぶつかればn秒間ストップ
デリゲートを使ってn秒後に実行
出現してから1秒後に落下する
スタートから3秒後にプレーヤーを追いかける