非アクティブのオブジェクトに触れるとアクティブ状態になるように、スクリプトを作成してみましょう。
スタート時には、Sphereは非表示。
Sphereのあった位置にぶつかると、Sphereを取得して再びアクティブの状態になります。
関連記事:
親オブジェクトと子オブジェクトの取得
触れた相手のコライダーを削除(無効にする)
コライダーの無効化と有効化
エリア内にn秒間滞在すれば実行
近づくと倒れる円柱
子オブジェクトをすべて取得
触れるとアクティブ状態に変えるCollider
Plane、Cube、Sphereを作成し、それぞれに色をつけます。
SphereはY0.5に配置して、地上に出します。
Cubeを中心から離して配置し、リジッドボディを追加します。
ゲームビューではこのように見えています。
続いて、空のオブジェクトを作成しましょう。
GameObject(空のオブジェクト)は、Sphereと同じ位置にして、スフィアコライダーを追加。
トリガーにするにチェックを入れます。
このように、Sphereと同じ位置に、スフィアコライダーがあればOKです。
SphereをGameObjectの中に入れて、親子関係をつくりましょう。
アクティブと非アクティブのスクリプト作成
まずはCubeを動かせるようにスクリプトを作成しましょう。
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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CubeMove : MonoBehaviour { private float speed = 1.0f; void Update() { float moveX = Input.GetAxis("Horizontal") * Time.deltaTime * speed; float moveZ = Input.GetAxis("Vertical") * Time.deltaTime * speed; transform.position = new Vector3 ( transform.position.x + moveX, transform.position.y, transform.position.z + moveZ ); } } |
続いて、非アクティブとアクティブを切り替えるプログラムを作ります。
SphereArea.csを作成し、GameObjectに追加します。
SphereArea.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SphereArea : MonoBehaviour { [SerializeField] GameObject childObj; void Start() { childObj = transform.GetChild(0).gameObject; childObj.SetActive(false); } void OnTriggerEnter(Collider other) { if (other.gameObject.name == "Cube") { childObj.SetActive(true); } } } |
ゲームプレイして、Cubeを動かしましょう。
最初はSphereが非アクティブから始まり、プレーヤーがぶつかるとアクティブ状態に変わります。
このように、第三者的な親オブジェクトを経由すれば、非アクティブのオブジェクトでも、当たり判定で取得可能です。
関連記事:
親オブジェクトと子オブジェクトの取得
触れた相手のコライダーを削除(無効にする)
コライダーの無効化と有効化
エリア内にn秒間滞在すれば実行
近づくと倒れる円柱
子オブジェクトをすべて取得