処理を書いた後には見直しを行います。
OnTriggerEnter2D メソッド内に記述した処理が長くなってきたので、新しくメソッドを作成し、こちらの処理をそのメソッド内で処理するように
スクリプトの処理を作り直しましょう。
デバッグとは異なり、処理の流れ自体に変更はないものの、処理をメソッド単位でまとめたり、見やすくして改善する手法を
リファクタリングといいます。
// 侵入判定
private void OnTriggerEnter2D(Collider2D col) {
// バレットが接触したら
if (col.gameObject.tag == "Bullet") {
////* ここから別のメソッドに処理を記述する *////
// 侵入判定の確認
Debug.Log("侵入したオブジェクト名 : " + col.gameObject.tag);
// バレットを破壊する
Destroy(col.gameObject);
// このゲームオブジェクトを破壊する
Destroy(gameObject);
////* ここまで *////
}
}
今回はこの範囲の処理を新しく作成するメソッド内に移動させて、この部分では、メソッドの呼び出し命令のみを記述するようにします。
今回メソッドを作成して処理を行うためには1つ条件があります。それは、OnTriggerEnter2D メソッドにおいて取得している、
侵入してきたオブジェクトの情報です。
この情報は
引数の col 変数に代入されている情報であるため、別のメソッドではスコープの関係上
利用できません。
そのため、別のメソッドでこの col 変数の情報を利用するには、新しく作成するメソッドにも
引数を用意して、この情報を渡してあげる必要があります。
用意する引数の型は、Collier 型、あるいは GameObject 型であれば渡しやすく、受け取ったメソッドでも利用しやすいです。
実際に自分で処理を書いてみてから、こちらを確認してみてください。
EnemyController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(CapsuleCollider2D))]
public class EnemyController : MonoBehaviour
void Update() {
// このスクリプトがアタッチしているゲームオブジェクトを徐々に移動する
transform.Translate(0, -0.01f, 0);
// 一定地点までエネミーが移動したら = このゲームオブジェクトの位置が一定値(-1500)を超えたら
if (transform.localPosition.y < -1500) {
// このスクリプトがアタッチしているゲームオブジェクトを破壊する
Destroy(gameObject);
}
}
// 侵入判定
private void OnTriggerEnter2D(Collider2D col) {
// バレットが接触したら
if (col.gameObject.tag == "Bullet") {
// 破壊処理を呼び出す
DestroyObjects(col);
}
}
////* ここからメソッドを1つ追加 *////
/// <summary>
/// バレットとエネミーの破壊処理
/// </summary>
private void DestroyObjects(Collider2D col)
{
// 侵入判定の確認
Debug.Log("侵入したオブジェクト名 : " + col.gameObject.tag);
// バレットを破壊する
Destroy(col.gameObject);
// このゲームオブジェクトを破壊する
Destroy(gameObject);
}
////* ここまで *////
}
いかがでしょうか。
メソッドに一連の処理がまとまっており、また、OnTriggerEnter2D メソッド内の処理もシンプルに見やすくなったと思います。
処理自体は同じことを行っているのですが、このように書き方を変えるだけで、全体の見やすさも変わってきます。
覚えておいて、自分で処理を書いた際には、見直しをしていくようにしてください。
以上でこの手順は終了です。
次は
手順11 −バレットの情報を利用してエネミーを破壊する制御を実装− です。