FC2ブログ
ヽ|∵|ゝ(Fantom) の 開発blog? ホーム » Unity »【Unity】UI のフォーカスを外すコードと「Attempting to select while already selecting an object.」

【Unity】UI のフォーカスを外すコードと「Attempting to select while already selecting an object.」  


 最近まで気が付かなかったのだが、Unity の UI を使っていると、例えばマウスでボタンをクリックした後に、キーボードの [Enter] キーを押すとそのままフォーカスが残っていて、無駄に連打されてしまうことがある。

 そこでフォーカスを外す方法を調べたら「EventSystem.current.SetSelectedGameObject(null) を使うと良い」とあったので使ってみたのだが(※interactable を一旦 false にする手もあるが、元に戻す必要がある)、ごく稀にタイミングによっては以下のエラーが出ることがある。

Attempting to select while already selecting an object.
UnityEngine.EventSystems.EventSystem:SetSelectedGameObject(GameObject)
・・・(中略)・・・
UnityEngine.EventSystems.EventSystem:Update()

(※) Unity 2018.4.13f1 / Windows10(x64) で確認

 最初の1行(Attempting to select while already selecting an object.)を google翻訳にかけると…

既にオブジェクトを選択しているときに選択しようとしています。

 いまいち意味がわからなかったので「Attempting to select while already selecting an object.」でググってみると、以下の記事が出てきた。

選択中扱いとするゲームオブジェクトの管理
Event System SetSelectedGameObject Error, but code still runs fine.
Unity UI 4.6 inputfield bug or behavoir?

 ああ、なるほど「現在選択中のオブジェクトと EventSystem.SetSelectedGameObject」 の引数のオブジェクトと比較して、同じだったらエラー出してる」んだね、と理解できた。

 また、フォーラムでは「EventSystem.alreadySelecting」(EventSystem が SetSelectedGameObject に存在する場合は true を返す)を使うと良い、みたいなことが書かれてあったので、試してみたのだが、「フォーカスを外す」ときの引数に null を渡す場合、やはりたまにエラーが出ることがある。まぁ、Debug.LogError なら実害は無いのだが、なんとなく気持ち悪いので、他の方法がないかと試してみたら、以下のコードで上手くいった。

//現在アクティブとみなされる GameObject が null でないとき
if (EventSystem.current.currentSelectedGameObject != null)
{
EventSystem.current.SetSelectedGameObject(null); //フォーカスを外す
}

EventSystem.currentSelectedGameObject

 まぁ、使っているコードが EventSystem の static なメソッドのみなので、static なクラスに関数を作っても良いと思う。地味な挙動だが、かえってサンプルコードみたいのが出て来なかったので、備忘録として残しておく。





(関連記事)
【Unity】Unity2018 でビルドエラー「CommandInvokationFailure: Gradle build failed.」が出る
【Unity】IncrementalCompiler でのエラー:Unloading broken assembly Packages/com.unity.incrementalcompiler/Editor/Plugins/Unity.PureCSharpTests.dll, this assembly can cause crashes in the runtime
【Unity】【Android】2019.2.0 でパッケージ名(Bundle Identifer)でアンダーバーが使えない
【Unity】EventTrigger のコールバック引数変わった?


関連記事
スポンサーサイト



category: Unity

thread: ゲーム開発

janre: コンピュータ

tag: Unityリファレンス  Unityトラブルシューティング  uGUI 
tb: 0   cm: --


トラックバック

トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/341-7ddc460a
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

Social

検索フォーム

全記事一覧

カテゴリ

ユーザータグ

最新記事

リンク

PR