配置されたキャラをタップ(クリック)した際の処理の流れをロジック化して設計します。
配置の解除確認用のポップアップはプレファブの状態になっていますので、タップされたら、それをいずれかのクラスから生成する必要があります。
ポップアップは Canvas ゲームオブジェクトの子オブジェクトとして作成をしていますので、UI の1つであると考えるならば、
生成する機能については、UI 関連の処理を管理している UIManager クラスに任せることが考えられます。
処理に必要な情報としては、ポップアップのプレファブを登録するための変数と、生成する位置の情報の変数です。
生成する位置は Canvas ゲームオブジェクトの子オブジェクトになるようにしたいので、Transform 型で変数を宣言しておくと親子関係が作れます。
タップした際には CharaController クラスに用意するメソッドを EventTrigger コンポーネントに登録して実行するようにします。
ただし、CharaController クラスには、UIManager クラスの情報がありません。代わりに GameManager クラスの情報は変数で管理しています。
GameManager クラスには UIManager クラスの情報が変数で管理されていますので、関節的に GameManager クラスに対してアクセスし、そこから UIManager につないでもらうようにします。
次のようなロジックです。
1.UIManager クラスにポップアップの生成を行うメソッドを準備する
2.GameManager クラスに、UIManager に用意した【1】のメソッドを実行するためのメソッドを準備する
3.CharaController クラスに、GameManager に用意した【2】のメソッドを実行するためのメソッドを準備する
処理の順番は、3→2→1 の順番になります。
キャラをタップしたら、CharaController クラスのメソッドを実行し、その中で GameManager クラスにある新しいメソッドを実行します。(3→2)
その後、GameManager クラスのメソッドが実行されて、UIManager クラスにあるポップアップの生成を行うメソッドを実行します(2→1)
このようなロジックにすることによって、CharaController クラス自体は UIManager クラスを知らない(変数として情報を保持していない)ものの、
UIManager クラスを知っている(変数として情報を管理している) GameManager クラスへアクセスし、仲介してもらうことで UIManager クラスのメソッドを間接的に実行できるようになります。