さくらの作業ログ

今度は三日坊主にしないといいな

戦闘画面のUIを作る

カーソルを出したいのでこう

Toggle>Background>Checkmarkにカーソル画像を登録

ゲームパッドで操作したいのでこう

Highlightの段階でカーソルが出るようにする

決定した時(トグルがONになったとき)に次のパネルを出したり今のパネルを操作不能にしたり次のパネルの一番上のトグルを選択状態にしたりする

Toggleの設定

ToggleGroup丸ごとdisableにするメソッドが無さそうだったので作成(ありそうなもんだけど)

   public void SetAllTogglesEnable(bool enable)
    {
        toggles.ForEach((Toggle toggle)=>{ toggle.enabled = enable; });
    }

選択の結果をバトルマネージャで取得したいので こうで

Toggleの設定

こう

class ButtleManager : MonoBehaviour
{
    public void receiveAction(){
        Debug.Log("レシーブ");
    }
}

攻撃、防御、スキル、アイテム、いずれにせよターゲットの選択が一番最後なので、ターゲット選択用のトグルにだけこいつを設定する
最終的にそれぞれのToggleGroupからOnになっているToggleの値をかき集めてくればよい

BボタンとEscapeキーで前の選択肢に戻りたいのでこう

   void Update()
    {
        if (Input.GetKeyDown(KeyCode.Escape) || Input.GetButtonDown("Fire2"))
        {
            Cancel();
        }
    }


    public void Cancel()
    {
        Debug.Log("キャンセル");
        ToggleGroupInherit toggleGroup = prevPanel.GetComponent<ToggleGroupInherit>();
        // 操作不能にしていたパネルのトグルを復活させる
        toggleGroup.SetAllTogglesEnable(true);
        // 選択していたものがOn状態のままでは困るのでOffにする
        Toggle selected = toggleGroup.ActiveToggles().FirstOrDefault();
        selected.isOn = false;
        // eventSystemで前のパネルの選択状態を復元
        // ここでeventSystemを操作しないと十字キーとかで動かせなくなる
        eventSystem.SetSelectedGameObject(selected.gameObject);
        // このパネルを非表示にする
        selfPanel.SetActive(false);
    }

次は場に出ているキャラクターの状態(MP切れ、死亡など)によってボタンを増減させる話(時期未定)

追記: コード公開しました

github.com