キー入力を一時的に無効化について

895 views
Skip to first unread message

ダイス

unread,
Aug 13, 2023, 12:52:11 PM8/13/23
to 宴ユーザーグループ
・宴のバージョン:3.12.4
・Unityのバージョン:2022.3.4.f1
・OSバージョン:Windows11
・Unityの習熟度:初心者、プログラム経験なし

お世話になります。

PauseScenarioを使って最初はシナリオジャンプ用のオブジェクトを用意しようと考えたんですが、自由に戻ることができないようなので今組み込んであるので一時的にキー入力、クリック無効にできないかと思ってやっていました。

具体的に、パネルでシナリオジャンプのアイコンを含めたのを用意してそこを押すことで各シナリオに遷移するという方式で、動作自体はできているのですが、パネルを呼び出してる間も下の画面は透過しているのでクリックやキー入力でシナリオが進行してしまう状態です。

このパネルを呼び出してる間はキー入力とクリックを一時的に無効にし、透過されている下の画面をクリックしてもシナリオが進行しないようにできないかと考えています。
SkipやAutoと言ったUIは一時的に無効化の処理はできています。

この辺りも含めてoverrideで追加してみたりしたのですが、Unity側のInput系と異なるのでしょうか?

この辺りのコードを追加し、

using UnityEngine;

public class InputControl : MonoBehaviour
{
    public GameObject panelSelect; // Drag your PanelSelect GameObject here

    private void Update()
    {
        if (panelSelect.activeSelf) // Check if PanelSelect is active
        {
            // Disable Enter key
            if (Input.GetKeyDown(KeyCode.Return) || Input.GetKeyDown(KeyCode.KeypadEnter))
            {
                // Do nothing or add your custom action here
            }

            // Disable Ctrl key
            if (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl))
            {
                // Do nothing or add your custom action here
            }

            // Disable ESC key
            if (Input.GetKeyDown(KeyCode.Escape))
            {
                // Do nothing or add your custom action here
            }

            // Disable right-click
            if (Input.GetMouseButtonDown(1))
            {
                // Do nothing or add your custom action here
            }

            // Disable mouse wheel scrolling
            if (Input.mouseScrollDelta.y != 0)
            {
                // Do nothing or add your custom action here
            }
        }
    }
}

Unity側のキー入力などの無効スクリプトを追加してもまだ動作してしまうような状態でした。
どのようにすれば制御できるでしょうか?

難しそうなら単純に下の画面透過を無くしたうえでパネル全面で覆ってボタン操作で制御すれば解決しそうなのですけど、レンダーテクスチャとファイルタイプがCustomの関係でサンプルプレビューで出してる画像が透過の影響を受けやすいという判断で、制御できるならと思いました。

よろしくお願いします。

マッドネスラボ

unread,
Aug 13, 2023, 2:24:12 PM8/13/23
to 宴ユーザーグループ
以前、制御しやすくしたのですが、ドキュメントがまとまっていなかったため先ほど追加しました。


基本的には、InputUtil.EnableInput をオンオフすることで宴のキーボードの入力は無効化されます。
AdvUguiManagerの「FilterInputUtilDisable」を「EveryThing」にすると、InputUtil.EnableInputのオンオフに合わせてページ送りなどのマウス入力も無効化されます。


>この辺りも含めてoverrideで追加してみたりしたのですが、Unity側のInput系と異なるのでしょうか?
おそらく継承やoverrideができていないのと、コンポーネントの付け替えができていないのだと思います。
これは、C#やUnityのプログラムがわからないとちょっと難しいかもしれないので、上記のInputUtil.EnableInputで制御してみてください。


2023年8月14日月曜日 1:52:11 UTC+9 ダイス:

ダイス

unread,
Aug 14, 2023, 5:50:33 AM8/14/23
to 宴ユーザーグループ
ドキュメント追加ありがとうございます。

継承やoverrideがうまくできていないようで、これは厳しそうだと思ってInputUtil.EnableInputで対応することとしました。
シナリオジャンプすると入力無効化が残っていたので、今のところボタンで入力有効化の処理をして対応することとしました。

ひとまず自分が思っていたような処理ができるようになったので、助かりました。
ありがとうございました。
2023年8月14日月曜日 3:24:12 UTC+9 マッドネスラボ:
Reply all
Reply to author
Forward
0 new messages