Unity uGUIのToggle “On Value Cahnged (Boolean)” で切り替え時の処理が重複する
先日リリースしたAndroid用ゲームのアップデートで、オプション画面を追加しました。
Unity uGUIのToggleで設定の切替をさせたのですが、Consoleのログでトグルの動作確認をすると想定外の動きをしていました。
※Toggle Group でトグルをグループ化し、”Allow Switch OFF” のチェックは外してグループ内のトグルどれか一つは常にチェックが入るように設定した状態です。
「トグル1用の処理は実行済み」でチェックマークが付いている状態で、トグル1からトグル2に切り替えると「トグル1用の処理が再び実行」された後、トグル2用の処理になっていました。
処理が重複して無意味なのでどうにかできないかと調べていたら、 Toggleコンポーネントにある “On Value Changed (Boolean)” が原因だと分かりました。
この設定は、「チェックマークが付いた時 (isOn)」に実行されるのではなく、「トグルの状態が変わった時」に実行されるものでした。
つまり、トグル2への切り替え時に発生するという訳ではなく、トグル1をONにした時、OFFにした時、どちらでも “On Value Changed (Boolean)” に設定した処理が実行されるということです。
対策として、”On Value Changed (Boolean)” を使うのをやめて、Event Triger で画像の様に設定しました(この場合は Pointer Down を使用)
このままでは、チェック済みであってもトグルをクリックする度に紐づけたイベントが実行されてしまいます。
その対策として、下記の様なスクリプトを設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ToggleController : MonoBehaviour { int toggleNum; public void TestEvent1() { if (toggleNum != 1) { toggleNum = 1; Debug.Log("Toggle1 TestEvent"); } } public void TestEvent2() { if (toggleNum != 2) { toggleNum = 2; Debug.Log("Toggle2 TestEvent"); } } } |
ボタンとイベントの番号を揃えておき、”toggleNum” と一致しない場合しか実行されないようにしました。
この機能を使ってアプリのアップデートをしています。
ディスカッション
コメント一覧
まだ、コメントがありません