今回紹介するのは、「指定した範囲に入ったことをトリガーにオブジェクトを生成する方法」です。
RPGなどで一定の場所に入った場合に、敵が出現するなど場所をトリガーにした処理操作はよく利用されます。
この記事では、指定したボックスの位置に入ることで、球を近くに生成する方法を紹介します。
前準備
この記事ではUnityのバージョン 2020.3.30f1を利用しています。
床とユニティちゃんを動かせるように以前の記事で紹介したunitychanアセットとstandardassetsを利用した記事を参考に作成して下さい。テクリエリトではこのプロジェクトをベースによく利用するのでコピーしておくと便利です。
© Unity Technologies Japan/UCL
指定した範囲に入ったことをトリガーに処理をする
まず、床の上にキューブを作成し、トリガーとなる指定の範囲をわかりやすくします。
キューブでトリガーとなる位置を作成
Hierarchyの新規オブジェクトより3D Object>Cubeを作成します。そして、床の少し上に出っ張るような位置に移動させます。
このキューブの上の位置を指定の位置にします。位置の判定にはBoxColliderを利用します。このキューブの子に右クリックから「Create Empty」で空のオブジェクトを作成し、これにインスペクターから「Add Component」で「Box Collider」を追加します。「Is Trigger」にチェックを入れます。
位置をキューブから少し上の位置に移動させ、キャラが収まるような位置に移動させます。
この記事の例では、キューブにマテリアルで色を付けていますが、処理上不要なので説明は割愛します。
トリガーを判定するスクリプトを作成する
Project>Assetsで右クリックを行いC#スクリプトを作成します。この記事では名前を「cube」としてます。
Visual Studioでスクリプトを開き、以下のスクリプトに修正します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class cube : MonoBehaviour
{
public GameObject position;
public GameObject target;
void OnTriggerEnter()
{
Instantiate(target, new Vector3(position.transform.position.x,
position.transform.position.y,
position.transform.position.z),
Quaternion.identity);
}
}
OnTriggerEnterを利用して、コライダーに入ったことを判定し、判定された場合に、「Instantiate」でtargetで指定したゲームオブジェクトを、postisionで指定したオブジェクトの位置に生成するというスクリプトです。
これをCubeの子の空のオブジェクトにドラッグアンドドロップで追加します。
次に、positionとして位置を取得するGameObjectを作成します。HerarchyからCreateEmptyで空のオブジェクトを生成し、適当なオブジェクトを生成したい位置に移動させます。
今回は、「Instantiate」で球を生成しますので、球を作成してそれをプレハブ化します。
Hierarchyから「3D Object>Sphere」で球のオブジェクトを作成します。作成したオブジェクトをHierarchyからProject>assetsにドラッグアンドドロップして、プレハブ化します。プレハブ化後はHierarchyに作成したSphereは不要なので削除します。
キューブの子の空のオブジェクトに追加したスクリプトの「position」と「target」の設定を行います。
positionには、先程生成した球を生成したい位置の空のオブジェクトをドラッグアンドドロップでセットします。
targetには、プレハブ化した球をセットします。
これで完成です。再生して動作を確認してみましょう。
まとめ
今回、「指定した範囲に入ったことをトリガーにオブジェクトを生成する方法」を紹介しました。
- キューブでトリガーとなる位置を作成
- OnTriggerEnterを利用したトリガーを判定するスクリプトの作成
- トリガー判定時にInstatiateでプレハブオブジェクトを生成する方法
この方法を利用すれば、敵のプレハブを用意しておいて一定の位置に入ることで敵を沸かすような処理を簡単に書くことができます。フラグ操作をすることで、一度だけ処理させたい場合や時間ごとに初期化させたい場合なども作成できますので是非試してみて下さい。
今回の記事が、皆さんの助けになると嬉しいです。
もしこの記事が気に入りましたら、ぜひテクリエイトへのブックマーク登録をして頂けると喜びます。
以上、おつかれさまでした!