御朱印用のイベントを作成にあたり、GetGenerator クラスを修正します。
いずれのゲームオブジェクトからでも御朱印の獲得演出イベントにアクセスできるように、シングルトンクラスの機能を持たせます。
このようにすることにより、いくつかの変数が削除できますので、外部クラスとの依存関係が解消出来、
外部からクラスから独立(自立)して責務を果たせるようになります。
GetGenerator.cs

<= クリックすると開きます。
using System.Collections;
using UnityEngine;
public class GetGenerator : MonoBehaviour
{
//private GameManager gameManager; // 削除します
//御朱印獲得アイコンの管理
[SerializeField, Header("御朱印獲得アイコン")]
private GoshuinNotification goshuinNotification;
//御朱印獲得管理
[SerializeField, Header("御朱印獲得画面")]
private PlacementGetPopUp placementGetPopUpPrefab;
private PlacementGetPopUp placementGetPopUp;
[SerializeField, Header("スタンプ")]
private PlacementStampPopUp placementStampPopUpPrefab;
private PlacementStampPopUp placementStampPopUp;
[SerializeField, Header("キャンバス")]
private Transform canvasTran;
//[SerializeField, Header("プレイヤーコントローラー")]
//private PlayerController playerController; // 削除します
//[SerializeField]
//private GoshuinGenerator goshuinGenerator; // 削除します
public static GetGenerator instance;
void Awake() {
if (instance == null) {
instance = this;
DontDestroyOnLoad(gameObject);
}
else {
Destroy(gameObject);
}
}
/// <summary>
///
/// </summary>
/// <param name="gameManager"></param>
/// <returns></returns>
public void SetUpGetGenerator() // GameManager gameManager の引数も不要です
{
//this.gameManager = gameManager; // 不要です
// キャラ配置用のポップアップの生成
//yield return StartCoroutine(CreatePlacementGetStampPopUp()); // 通常のメソッドにします
CreatePlacementGetStampPopUp(); // 上記の処理を普通のメソッドの呼び出し命令に変更します
}
/// <summary>
/// 御朱印獲得のポップアップ生成
/// </summary>
/// <returns></returns>
private void CreatePlacementGetStampPopUp() // 処理の内部にコルーチンである必要性が見られないため、通常のメソッドにします
{
// placementTelHelpPopUpのポップアップを生成
placementGetPopUp = Instantiate(placementGetPopUpPrefab, canvasTran, false);
placementStampPopUp = Instantiate(placementStampPopUpPrefab, canvasTran, false);
// placementTelHelpPopUpのポップアップの設定。あとでキャラ設定用の情報も渡す
placementGetPopUp.SetUpPlacementGetPopUp(this);
placementStampPopUp.SetUpPlacementStampPopUp(this);
// placementTelHelpPopUpのポップアップを非表示にする
placementGetPopUp.gameObject.SetActive(false);
placementStampPopUp.gameObject.SetActive(false);
//yield return null; // 削除します
}
/// <summary>
/// 御朱印獲得のポップアップの表示
/// </summary>
public void ActivatePlacementGetStampPopUp(GoshuinData goshuinData)
{
StartCoroutine(ActivatePlacementGetStampPopUp2(goshuinData));
}
/// <summary>
/// 御朱印獲得のポップアップの非表示
/// </summary>
public void InActivateGetGoshuinPopUp()
{
placementGetPopUp.gameObject.SetActive(false);
placementStampPopUp.gameObject.SetActive(false);
}
public IEnumerator ActivatePlacementGetStampPopUp2(GoshuinData goshuinData)
{
//playerController.StopPlayer(); // プレイヤーの移動制御は PlayerController 側で行っていますので不要です
placementGetPopUp.DisplayGoshuin(goshuinData);
placementStampPopUp.DisplayStamp(goshuinData);
placementGetPopUp.gameObject.SetActive(true);
yield return new WaitForSeconds(2);
placementStampPopUp.StampAction(goshuinData);
//placementGetGoshuinStampPopUp.gameObject.SetActive(true);
yield return new WaitForSeconds(2);
placementGetPopUp.gameObject.SetActive(false);
placementStampPopUp.gameObject.SetActive(false);
//Newアイコンをオンにする
goshuinNotification.ActiveGetGoshuinIconPopUp();
//御朱印ジェネレーターを更新させる
//goshuinGenerator.CreateHaveGoshuinDatasList2();
yield return new WaitForSeconds(1);
//playerController.NonStopPlayer(); // プレイヤーの移動制御は PlayerController 側で行っていますので不要です
}
}
スクリプトを修正したらセーブします。
どの部分を改良したのか確認しておくようにし、処理への理解を深めてください。
コメントをかく