トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

ToggleGroup機能をスクリプトからオフにする方法がない【Unity】

ToggleGroup

UnityのToggleGroupは各Toggleをまとめてラジオボタンみたいに一つしか選択できないようにする機能

docs.unity3d.com

f:id:bibinbaleo:20210202151559p:plain

つまりこの機能がオフならチェックボックスみたいに複数選択可能で、オンならラジオボタンってこと!だと思った。

動的に切り替えたい

同じToggleGroupをラジオボタンみたいに扱うとき(ToggleGroupの機能有効)とチェックボックスみたいに扱うとき(ToggleGroupの機能無効)をスクリプトから切り替えたい。

試した事

なのでスクリプトからToggleGroup.enabled=falseにしたら、インスペクタ上はちゃんとオフになっているのに、変わらずラジオボタンみたいに動く><

f:id:bibinbaleo:20210202151605p:plain

なんでや~~

 

スクリプトから操作しているからタイミング的な問題なのかと思って、新しいシーンでインスペクタ上でやってみたけど、同じように無効にならない

 

ToggleGroupがついているスクリプトごとオフにしたけどダメ。何ならAllowSwitchOffの挙動まで反映されるやん!なんで!!逆に何がオフになるんだよ

f:id:bibinbaleo:20210202152023p:plain

ToggleGroupのenabledによると

「有効であれば更新され、無効であれば更新されません。」

だって。更新って何だろう?

 

各ToggleにToggleGroupがセットされている時点で、ToggleGroupのオンオフは関係ないのだろうか?

f:id:bibinbaleo:20210202151802p:plain

ToggleGroupの中身

中の実装普通に見れた。

Updateとかで中の状態を更新しているわけではなく、最初しか呼ばれなさそう

f:id:bibinbaleo:20210202164557p:plain

f:id:bibinbaleo:20210202164929p:plain

ちなみにtoggleの使い方も説明してあった

f:id:bibinbaleo:20210202164407p:plain

解決方法1

チェックボックスにするとき、各ToggleのgroupをNullにする

_Toggle.group = null;

ラジオボタンにするときは、ToggleGroupをセットする

_Toggle.group = _ToggleGroup;

一応これで想定通りの動きはした

Toggleはfoerachなどでまわす

話し合い

ToggleGroupの話し合いはここで行われていた。

forum.unity.com

AllowSwitchOffの項目も、このスレッドの結果実装されたみたい。

 

そして後半のほうで

「'allowMultipleSelection'を使用できる可能性はありますか?これにより、トグルグループをオフにできるかどうかだけでなく、ユーザーが複数の選択肢を選択できるかどうか、およびグループ内で少なくとも1つのトグルが許可されるかどうかを制御できます。」

と聞いている人がいる!私も欲しい!!!!

でも結局実装されなかったのかな?

最後に

他の方法としてはToggleGroupからToggleをUnregisterして、またRegisterし直すとかかな??

でもScriptからRegisterもうまくいかなかった気がする。

他にいい方法があったら教えてください。