ボム機能の制作に向けて、2回の手順に分けて GameManager スクリプトの修正を行います。
今回の手順では
既存の処理をメソッド化し、
使いまわせるように準備します。
下記は、OnEndDrag メソッド内にある、干支を削除している処理です。
/// <summary>
/// 干支のドラッグをやめた(指を画面から離した)際の処理
/// </summary>
private void OnEndDrag() {
// つながっている干支が3以上あったら
if (eraseEtoList.Count >= 3) {
//// ここから ////
for (int i = 0; i < eraseEtoList.Count; i++) {
// 干支リストから取り除く
etoList.Remove(eraseEtoList[i]);
// エフェクト生成
GameObject effect = Instantiate(eraseEffectPrefab, eraseEtoList[i].gameObject.transform);
effect.transform.SetParent(etoSetTran);
// 干支を削除
Destroy(eraseEtoList[i].gameObject);
SoundManager.instance.PlaySE(SoundManager.SE_Type.Erase);
}
// スコアと消した干支の数の加算
AddScores(currentEtoType, eraseEtoList.Count);
//// スキルポイント加算
uiManager.AddSkillPoint(eraseEtoList.Count);
// TODO 4つ以上消えていたら、ボーナス
// 消した干支の数だけ新しい干支をランダムに生成
StartCoroutine(CreateEtos(eraseEtoList.Count));
eraseEtoList.Clear();
//// ここまで ////
} else {
for (int i = 0; i < eraseEtoList.Count; i++) {
// 選んだ数か2個以下の場合 各干支のboolを解除する
eraseEtoList[i].isSelected = false;
ChangeEtoAlpha(eraseEtoList[i], 1.0f);
}
}
firstSelectEto = null;
lastSelectEto = null;
currentEtoType = null;
}
干支を削除する処理は OnEndDrag メソッド内にあるため、干支を削除するためには、 OnEndDrag メソッドを実行して削除する必要があります。
これが現在の処理です。ドラッグの有無にかかわらず OnEndDrag メソッドを経由しないと、干支が削除できない状態です。
今回制作するボムの処理は、
ボムをタップすることで周囲の干支を削除する、という機能であるため、
干支をなぞってつなげる必要がありません。
つまり、干支を削除したいのですが、OnEndDrag メソッドそのものではなく、その中にある干支を削除する部分のみを必要としてるため、
削除するまでの過程が今までとは異なっています。
ですが、タップ後の
ボムの処理自体は干支の削除です。
削除の処理自体は、すでに OnEndDrag メソッド内にある機能の一部です。これを利用することができれば、新しく同じ機能を持つ処理を作る必要はありません。
また、同じ処理を何か所にもその都度作成するのは勿体ないです。
こういったケースにおいては、
使いたい処理をブロック単位で取り出し、メソッド化しましょう。
メソッド化しておけば、
メソッドの実行命令を1行書くだけで、処理を行ってくれるようになります。
先ほどの干支の削除部分をメソッド化すると、下記のように置き換えることが可能です。
まずは、既存の部分をコメントアウトしましょう。
その代わりに、メソッドの呼び出し命令を1行書きます。
/// <summary>
/// 干支のドラッグをやめた(指を画面から離した)際の処理
/// </summary>
private void OnEndDrag() {
// つながっている干支が3以上あったら
if (eraseEtoList.Count >= 3) {
// 選択されている干支を消す
EraseEtos(); // ← 新しく作るメソッドの実行命令
// メソッド化する部分をコメントアウト
// for (int i = 0; i < eraseEtoList.Count; i++) {
// // 干支リストから取り除く
// etoList.Remove(eraseEtoList[i]);
//
// // エフェクト生成
// GameObject effect = Instantiate(eraseEffectPrefab, eraseEtoList[i].gameObject.transform);
// effect.transform.SetParent(etoSetTran);
//
// // 干支を削除
// Destroy(eraseEtoList[i].gameObject);
//
// SoundManager.instance.PlaySE(SoundManager.SE_Type.Erase);
// }
//
// // スコアと消した干支の数の加算
// AddScores(currentEtoType, eraseEtoList.Count);
//
// //// スキルポイント加算
// uiManager.AddSkillPoint(eraseEtoList.Count);
//
// // TODO 4つ以上消えていたら、ボーナス
//
// // 消した干支の数だけ新しい干支をランダムに生成
// StartCoroutine(CreateEtos(eraseEtoList.Count));
// eraseEtoList.Clear();
// ここまで
} else {
for (int i = 0; i < eraseEtoList.Count; i++) {
// 選んだ数か2個以下の場合 各干支のboolを解除する
eraseEtoList[i].isSelected = false;
ChangeEtoAlpha(eraseEtoList[i], 1.0f);
}
}
firstSelectEto = null;
lastSelectEto = null;
currentEtoType = null;
}
そして、下記の新しい EraseEtos メソッドを定義し、そちらに OnEndDrag メソッド内にあった、干支の削除の処理を移動させます。
メソッドを定義する部分はどこでも構いませんが、OnEndDrag メソッドの下に追加するとつながりが見えやすいでしょう。
/// <summary>
/// 選択されている干支を消す
/// </summary>
/// <param name="eraseCount"></param>
private void EraseEtos() {
// 選択されている干支を消す
for (int i = 0; i < eraseEtoList.Count; i++) {
// 干支リストから取り除く
etoList.Remove(eraseEtoList[i]);
// エフェクト生成
GameObject effect = Instantiate(eraseEffectPrefab, eraseEtoList[i].gameObject.transform);
effect.transform.SetParent(etoSetTran);
// 干支を削除
Destroy(eraseEtoList[i].gameObject);
SoundManager.instance.PlaySE(SoundManager.SE_Type.Erase);
}
// スコアと消した干支の数の加算
AddScores(currentEtoType, eraseEtoList.Count);
//// スキルポイント加算
uiManager.AddSkillPoint(eraseEtoList.Count);
// TODO 4つ以上消えていたら、ボーナス
// 消した干支の数だけ新しい干支をランダムに生成
StartCoroutine(CreateEtos(eraseEtoList.Count));
eraseEtoList.Clear();
}
引数などもありませんので、単純にメソッドを新しく1つ作成し、OnEndDrag メソッドの中身を移動させています。
このように処理をメソッド化することで、実行命令を書けば、干支の削除の命令をおこなってくれるようになりました。