次々と生成されるPrefabに対して、ぶつかれば削除できるように、スクリプトを作ってみましょう。
Cubeを動かして、落下してくるSphereオブジェクトに触れると消えます。
Prefabデータにはtagを用いて、当たり判定を作ります。
関連記事:
エリア内でランダム移動する
ランダムでPrefabのサイズを変える
1秒おきにランダムでボールを落とす
ランダムでPrefabの座標を変える
倒れると削除
Sphereプレハブの生成
PlaneとSphereを作成。
Sphereにはリジッドボディを追加します。
Sphereにマテリアルを付け、ヒエラルキーにドラッグ&ドロップしてPrefab化します。
Sphereの元データを削除しておきます。
Sphereのプレハブを選択し、Ballという名前でタグを付けます。
空のオブジェクトを作成。
SphereScript.csを作成し、GameObjectに追加します。
SphereScript.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SphereScript : MonoBehaviour { public GameObject ball; private float time; private int x; private int z; void Start() { time = 0.0f; } void Update() { time -= Time.deltaTime; if(time <= 0.0f) { time = 2.0f; x = Random.Range(-5,5); z = Random.Range(-5,5); Instantiate(ball,new Vector3(x, 10, z),Quaternion.identity); } } } |
Ballのフィールドに、Sphereを入れます。
ゲームプレイすると、2秒おきにランダムで落下します。
プレハブへの当たり判定
続いて、プレーヤーとしてCubeを作成します。
Y座標を変えて地上に出し、リジッドボディを追加します。
マテリアルを付けてわかりやすくしました。
ゲームビューではこのように見えています。
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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeMove : MonoBehaviour { void Update() { if (Input.GetKey(KeyCode.UpArrow)) { transform.Translate(0f, 0f, 0.1f); } if (Input.GetKey(KeyCode.DownArrow)) { transform.Translate(0f, 0f, -0.1f); } if (Input.GetKey(KeyCode.LeftArrow)) { transform.Translate(-0.1f, 0f, 0f); } if (Input.GetKey(KeyCode.RightArrow)) { transform.Translate(0.1f, 0f, 0f); } } void OnCollisionEnter(Collision collision) { if (collision.gameObject.tag == "Ball") { Destroy(collision.gameObject); } } } |
ゲームプレイしてみましょう。
Cubeを動かし、Sphereを取りに行きます。
Ballタグの付いたSphereプレハブは、ぶつかると削除されます。
関連記事:
エリア内でランダム移動する
ランダムでPrefabのサイズを変える
1秒おきにランダムでボールを落とす
ランダムでPrefabの座標を変える
倒れると削除