はじめに
ToggleGroup内で上記のような設定にした場合UI外部分の画面をクリックするとSelected状態が解除されてしまいます
なのでUI外部分の画面をクリックしてもSelected状態が解除されないようにしていきます
環境はUnity 2021.3.25f1です
Universal Render Pipeline を使用しています。
スクリプト作成
下記スクリプトを作成してアタッチされているToggleをこのクラスに置き換えてください。
using UnityEngine.UI; using UnityEngine.EventSystems; /// <summary> /// ToogleGroupでSelectアニメーションを維持できるToggle拡張クラス /// 最初からSelectアニメーション再生させるために /// ToogleGroupのStart後にSelect()で選択状態にする必要がある /// </summary> public class TestToggle : Toggle { void Awake() { onValueChanged.AddListener((a) => OnValueChange(a)); } public override void OnDeselect(BaseEventData eventData) { base.OnDeselect(eventData); if (isOn) { DoStateTransition(SelectionState.Selected, false); } else { InstantClearState(); } } public override void OnPointerEnter(PointerEventData eventData) { if (isOn) { return; } base.OnPointerEnter(eventData); } public override void OnPointerClick(PointerEventData eventData) { if (isOn) { return; } base.OnPointerClick(eventData); } public override void OnPointerUp(PointerEventData eventData) { if (isOn) { return; } base.OnPointerUp(eventData); if (!isOn) { InstantClearState(); } } public override void OnPointerExit(PointerEventData eventData) { if (isOn) { return; } base.OnPointerExit(eventData); } public override void OnPointerDown(PointerEventData eventData) { if (isOn) { return; } base.OnPointerDown(eventData); } public void OnValueChange(bool flg) { if (isOn) { DoStateTransition(SelectionState.Selected, flg); } else { InstantClearState(); } } }
完成
UI外部分の画面をクリックしてもSelected状態が解除されないようになりました