今回はUnity2Dで「オブジェクト」を合体させてみます。いわゆるマージと言うやつですね。
はじめに
Unityのバージョンは2021.3.14f1です。
下記の様に白い箱同士(同じオブジェクト)がぶつかると青い箱になるのを実装していきます。
実装開始
簡単な画面を作成してスクリプトで実装していきます。
UIの作成
Hierarchyで右クリック、「2DObject」→「Sprites」→「Square」を追加。
名前をGroundにして、スケールと色を変更、BoxCollider2Dをアタッチして地面にします。
Hierarchyで右クリック、「2DObject」→「Sprites」→「Square」を追加。
名前をWhiteBoxに変更、BoxCollider2DとRigidbody2Dをアタッチ。
コピーして白い箱を2つにします。コピーした箱は位置(Position)を変更します。
実行すると下記の様な感じに。
合体後のオブジェクト
同じくコピーして名前と色を変更。
両方ともプレハブ化してBlueBoxの方は消します。
スクリプトを作成
下記スクリプトを作成し、whiteboxにアタッチします。衝突した時に、合体後のオブジェクトを生成して元のオブジェクトを破壊します。
using UnityEngine; public class MergeBox : MonoBehaviour { [SerializeField] private GameObject BoxObject; private void OnCollisionEnter2D(Collision2D collision) { if (colobj.CompareTag("MergeBox")) { Instantiate(BoxObject, transform.position, Quaternion.identity); Destroy(collision.gameObject); Destroy(gameObject); } } }
Tagをセットして、パラメータに作成したプレハブ(合体後の青箱)をセット。
このまま実行すると、衝突した物体同士で実行してしまうので、フラグを利用して1度しか実行しないように変更。
using UnityEngine; public class MergeBox : MonoBehaviour { [SerializeField] private GameObject BoxObject; private bool isMergeFlag = false; private void OnCollisionEnter2D(Collision2D collision) { GameObject colobj = collision.gameObject; if (colobj.CompareTag("MergeBox")) { if (colobj.GetComponent<MergeBox>().isMergeFlag == true) return; isMergeFlag = true; Instantiate(BoxObject, transform.position, Quaternion.identity); Destroy(collision.gameObject); Destroy(gameObject); } } }
これで衝突した時に元の物体を消して、新しい物体を生成します。
片方を消して、もう片方のスプライトを変更するって言う方法もありますね。