クリックした瞬間だけアクティブ状態になり、他のオブジェクトがそこにぶつかった場合のみ、消えるようにしましょう。
クリックすれば0.5秒だけ色が変わり、その間にボールがぶつかった時だけ、削除されます。
プロセカのような音ゲーで、ノーツを破壊したい時などに、使えそうな機能です。
関連記事:
他のスクリプトのBoolを取得する
向かってくるオブジェクトをクリックで破壊
音ゲーのノーツみたいなオブジェクト動作
クリックすると1秒間だけ実行
キー入力によってn秒間だけ実行
アクティブ状態の時間をはかる
クリックで反応するCubeの作成
Cubeを作成し、トリガーにするにチェック。
横方向を伸ばしてサイズを変えます。
MainCameraの位置と角度を変え、見下ろすような視野にします。
ゲームビューではこのように見えています。
CubeClick.csを作成し、Cubeに追加します。
CubeClick.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeClick : MonoBehaviour { public bool isClicked; public static CubeClick instance; public void Awake() { if(instance == null) { instance = this; } } void Start() { GetComponent<Renderer>().material.color = Color.yellow; isClicked = false; } void Update() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Input.GetMouseButtonDown(0)) { if (Physics.Raycast(ray, out hit)) { StartCoroutine("ChangeColor"); } } } IEnumerator ChangeColor() { isClicked = true; GetComponent<Renderer>().material.color = Color.red; yield return new WaitForSeconds(0.5f); isClicked = false; GetComponent<Renderer>().material.color = Color.yellow; } } |
ゲームプレイして、Cubeをクリックしてみましょう。
0.5秒間だけ、色が変化します。
ノーツを破壊するような操作
空のオブジェクトを作成し、座標を10にします。
ClonePoint.csを作成し、GameObjectに追加します。
ClonePoint.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ClonePoint : MonoBehaviour { private float time; public GameObject sphere; void Start() { time = 1.0f; } void Update() { time -= Time.deltaTime; if(time <= 0.0f) { Instantiate(sphere,this.transform.position,Quaternion.identity); time = 1.0f; } } } |
Sphereを作成し、リジッドボディを追加します。
UseGravityのチェックを外します。
SphereMove.csを作成し、Sphereに追加します。
SphereMove.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 SphereMove : MonoBehaviour { void Update() { transform.position += new Vector3(Time.deltaTime * 0, 0, -0.3f); if(transform.position.z <= -20) { Destroy(gameObject); } } void OnTriggerEnter(Collider other) { if(other.gameObject.name == "Cube" && CubeClick.instance.isClicked) { Destroy(gameObject); } } } |
Sphereをプロジェクトビューにドラッグ&ドロップし、プレハブ化します。
Sphereの元データは削除しておきます。
スフィアのフィールドに、Sphereを入れましょう。
ゲームプレイして、動きを確認します。
そのまま何もしなければ、ボールが通過します。
Cubeをクリックして、赤色になった時だけ、ボールが削除。
Cubeをクリックして、黄色に戻ったら、そのまま通過していきます。
関連記事:
他のスクリプトのBoolを取得する
向かってくるオブジェクトをクリックで破壊
音ゲーのノーツみたいなオブジェクト動作
クリックすると1秒間だけ実行
キー入力によってn秒間だけ実行
アクティブ状態の時間をはかる