自分が動いた1秒後に、他のオブジェクトが動くしくみを作ってみましょう。
コンピューターとの間でターン制にしたい場合など、使えるシーンはたくさんあります。
Playerである緑キューブをクリックで動かすと、1秒後に赤キューブが動きます。
関連記事:
他のスクリプトの変数を取得する
他のスクリプトの関数を実行する
他のスクリプトのBoolを取得する
PlayeとComを準備
平面オブジェクトで床をつくり、Cubeを2個用意します。
1つはPlayerと名前をつけて緑色に、もう一方はComと名前をつけて赤色にしました。
2つのCubeには、リジッドボディを追加しましょう。
Com側のスクリプト
Comオブジェクトに、ComMove.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ComMove : MonoBehaviour { private float power; private Rigidbody rb; void Start() { power = -5; } public void ComTurn() { StartCoroutine("ComForward"); } IEnumerator ComForward() { yield return new WaitForSeconds(1.0f); rb = GetComponent<Rigidbody>(); rb.AddForce(0, 0, power, ForceMode.Impulse); } } |
コルーチンを使い、1秒後に力を加えます。
-5の力を加えるので、Playerとは逆方向に動くことになります。
Player側のスクリプト
続いて、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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMove : MonoBehaviour { private float power; private Rigidbody rb; public GameObject com; void Start() { power = 5; com = GameObject.Find("Com"); } void OnMouseDown() { rb = GetComponent<Rigidbody>(); rb.AddForce(0, 0, power, ForceMode.Impulse); com.GetComponent<ComMove>().ComTurn(); } } |
こちらは、Playerオブジェクトを動かした後に、Com側のメソッドを実行するスクリプトを入れています。
ゲームプレイしてみましょう。
プレーヤーの動作後に、コンピューター側が動く。
クリックの連射防止を入れたり、秒数を調整すれば、ちょっとしたターン制ゲームも構想できますね。