質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

3853閲覧

Input SystemのPlayerInputでの挙動

退会済みユーザー

退会済みユーザー

総合スコア0

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

1クリップ

投稿2020/09/07 13:51

編集2020/09/08 08:39

前提・実現したいこと

こちらを参考に、MouseとTouchにおいて、
「コールバックを登録する」の方法は実装ができ、Mouseの左ボタンでも、タッチでもFireが動くことは確認できたのですが、
「より手軽に入力を受け取れるPlayerInput」の方法を試したところ、Android実機のタッチにおいて、意図せぬ挙動となったため、
ご教示お願い致します。

試したこと

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.InputSystem; 5 6[RequireComponent(typeof(PlayerInput))] 7public class MyInput : MonoBehaviour 8{ 9 10 [SerializeField] 11 GameObject cube; 12 13 void OnFire() { 14 cube.transform.localScale *= 2.2f; 15 } 16}

Default Shemeには、Any,Mouse,Touchsreenの3種類が用意されていますが、
イメージ説明

Anyはおそらく、「どれでも」、つまり、MouseにもTouchsreenにも対応していると考えているのですが、
下記のようにAnyに設定してテストすると、Android実機上でのタッチに反応しなかったのです。
この挙動に疑問があるのですが、いかがでしょうか?

イメージ説明

ちなみに、Default SchemeをTouchsreenに設定した場合は、Android実機上でタッチが反応しました。
Android実機上での結果は下記です。MapはPlayerしか作成していません。
他の設定は画像の通りで変えていません。

Default Scheme:Any, Auto-Switch:オンの結果:×Android実機上でタッチに反応せず。 Default Scheme:Any, Auto-Switch:オフの結果:×Android実機上でタッチに反応せず。 Default Scheme:Mouse, Auto-Switch:オンの結果:×Android実機上でタッチに反応せず。 Default Scheme:Mouse, Auto-Switch:オフの結果:×Android実機上でタッチに反応せず。 Default Scheme:Touchscreen, Auto-Switch:オンの結果:〇Android実機上でタッチに反応。 Default Scheme:Touchscreen, Auto-Switch:オフの結果:〇Android実機上でタッチに反応。

Touchscreenに反応するならば、Anyで反応してもいいような気がするのですが、何故なのでしょうか。

Auto-Switchの設定もよくわからないのですが、この設定は何なのでしょうか?

また、Unityエディタのマウスの左クリックは全てに反応しました。

Default Scheme:Any, Auto-Switch:オンの結果:〇Unityエディタのマウスの左クリックに反応。 Default Scheme:Any, Auto-Switch:オフの結果:〇Unityエディタのマウスの左クリックに反応。 Default Scheme:Mouse, Auto-Switch:オンの結果:〇Unityエディタのマウスの左クリックに反応。 Default Scheme:Mouse, Auto-Switch:オフの結果:〇Unityエディタのマウスの左クリックに反応。 Default Scheme:TouchScreen, Auto-Switch:オンの結果:〇Unityエディタのマウスの左クリックに反応。 Default Scheme:TouchScreen, Auto-Switch:オフの結果:〇Unityエディタのマウスの左クリックに反応。

補足情報(FW/ツールのバージョンなど)

Unity 2020.1.2f1 (64-bit)

追記

・Anyのログ。

Info Unity Default scheme for MyInput: Info Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35) Info Unity Info Unity Current scheme for MyInput: Mouse Info Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35) Info Unity Info Unity Connected device 0: Keyboard:/Keyboard Info Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35) Info Unity Info Unity Connected device 1: Keyboard:/Keyboard1 Info Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35) Info Unity Info Unity Connected device 2: Keyboard:/Keyboard2 Info Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35) Info Unity Info Unity Connected device 3: Mouse:/Mouse Info Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35) Info Unity Info Unity Connected device 4: Keyboard:/Keyboard3 Info Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35) Info Unity Info Unity Connected device 5: Touchscreen:/Touchscreen Info Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35) Info Unity Info Unity Connected device 6: Keyboard:/Keyboard4 Info Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)

・Mouseのログ。

Info Unity Default scheme for MyInput: Mouse Info Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35) Info Unity Info Unity Current scheme for MyInput: Mouse Info Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35) Info Unity Info Unity Connected device 0: Keyboard:/Keyboard Info Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35) Info Unity Info Unity Connected device 1: Keyboard:/Keyboard1 Info Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35) Info Unity Info Unity Connected device 2: Keyboard:/Keyboard2 Info Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35) Info Unity Info Unity Connected device 3: Mouse:/Mouse Info Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35) Info Unity Info Unity Connected device 4: Keyboard:/Keyboard3 Info Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35) Info Unity Info Unity Connected device 5: Touchscreen:/Touchscreen Info Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35) Info Unity Info Unity Connected device 6: Keyboard:/Keyboard4 Info Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)

・Touchscreenのログ。

Info Unity Default scheme for MyInput: Touchscreen Info Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35) Info Unity Info Unity Current scheme for MyInput: Touchscreen Info Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35) Info Unity Info Unity Connected device 0: Keyboard:/Keyboard Info Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35) Info Unity Info Unity Connected device 1: Keyboard:/Keyboard1 Info Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35) Info Unity Info Unity Connected device 2: Keyboard:/Keyboard2 Info Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35) Info Unity Info Unity Connected device 3: Mouse:/Mouse Info Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35) Info Unity Info Unity Connected device 4: Keyboard:/Keyboard3 Info Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35) Info Unity Info Unity Connected device 5: Touchscreen:/Touchscreen Info Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35) Info Unity Info Unity Connected device 6: Keyboard:/Keyboard4 Info Unity (Filename: ./Runtime/Export/Debug/Debug.bindings.h Line: 35)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Bongo

2020/09/07 22:49

Androidで実験できる環境を持っておらず手探りになってしまいますが、参考情報になりそうな事項として、MyInputスクリプトに... private void Start() { var playerInput = this.GetComponent<PlayerInput>(); Debug.Log($"Default scheme for {playerInput.name}: {playerInput.defaultControlScheme}"); Debug.Log($"Current scheme for {playerInput.name}: {playerInput.currentControlScheme}"); var i = 0; foreach (var device in InputSystem.devices) { Debug.Log($"Connected device {i++}: {device}"); } } としてみると、PlayerInputの設定を変化させた時にそれぞれどのような出力になるか確認いただけますでしょうか。なお、あいにく先ほど申し上げたようにAndroid実機で試せる環境を持っておらず、実機でDebug.Logの出力を確認する方法については無知でして、ご質問者さんの方がお詳しいかと思います。Androidデバイスとパソコンを接続し、Android Device MonitorとかLogcatとかいう機能で見ることができるらしいですが... あるいはDebug.Logではなく、画面上にTextを配置してそこに表示させるのでもいいかもしれません。
退会済みユーザー

退会済みユーザー

2020/09/08 08:41

ご指摘ありがとうございます。 Android Logcatでログを取り、質問欄に追記しました。 よろしくお願いいたします。
guest

回答1

0

ベストアンサー

まだ動作について十分に確信できるほど実験したりリファレンスを読んだりしたわけではないので、何か誤解がある可能性もありますがご容赦ください...

Default Schemeで「<Any>」以外を選んだ場合、どうやらまずそのスキームが使用可能かどうかを優先的に調べ、ダメなら他のスキームを試すような挙動をするようでした。「<Any>」の場合はこの「あるスキームが使用可能かどうかを優先的に調べる」ということを行わなくなるようです。
パッケージ内にあるPlayerInputEditor.csを見てみたところ、<Any>を選ぶのはPlayerInput.defaultControlSchemenullにするのと同等なようでした。

ご質問者さんに試してみていただいた結果と照らし合わせて考えると、どうやらAndroid端末にはタッチスクリーンだけでなくマウスとして認識されるデバイス(他にもキーボードとして認識されるデバイス)も存在するように見えますので、Default Schemeが「Touchscreen」の時はまずTouchscreenスキームの使用を試み、Android端末にはタッチスクリーンがあるので使用可能と判断されてTouchscreenスキームになるのでしょう。
一方「<Any>」だと、おそらく最初からすべての認識されているデバイスを対象に使用可能なスキームを探した結果、Touchscreenスキーム以外の何か(今回はTouchscreen以外のスキームはMouseだけなのでMouseスキームのはず)が採用されてしまった...ということじゃないかと思います。
また、Unityエディタ上での「Default Schemeをどれに設定してもマウスに反応する」という現象についても...

  • 「Mouse」の時はまずマウスが使用可能かを調べ、使用可能なのでMouseスキームになる
  • 「Touchscreen」の時はまずタッチスクリーンが使用可能かを調べ、使用できないので残りのスキームの中から使用可能なものを探した結果Mouseスキームになる
  • <Any>」の時は最初からすべてのスキームの中で使用可能なものを探した結果Mouseスキームになる

と解釈できそうです。Unityエディタ上で実行した場合でしたら実行中にインスペクターを見ることができますが、実行中にはPlayerInputのインスペクターに「Debug」欄が表示され、そこで実際に選択されているスキームがどれであるか分かるようになっているみたいですね。

Default Scheme欄を使えば最優先で試すスキームを一つ選ぶことはできそうですので、ご質問者さんの場合ではDefault SchemeをTouchscreenにしておけばいいんじゃないかと思います。ですがたとえば「まず○○スキームを試し、ダメなら△△スキーム、さらにダメなら××スキーム...」みたいな多段階の優先順位を付けられるのかどうかはわかりませんでした。
もしかしたら自前でPlayerInput.SwitchCurrentControlSchemeだとかを使って切り替えるコードを書く必要があるのかもしれませんが...このメソッドにしても説明書きのボリュームや使用例が少なくて、どう使うのが適切なのかはもっとしっかりコードを読んだり実験したりして調べる必要がありそうです。

Auto-Switchについてもまだちょっと意味するところを理解しきれておらずすみませんが、この設定はどうやらPlayerInputが一つだけ存在し、かつPlayerInputManagerも使用していない状態...シングルプレイヤーモード(PlayerInput.isSinglePlayertrue)の場合に意味を持つようで、現在使用されているデバイス以外のデバイスの使用が検出されたら自動的にスキームを切り替えるような動作をさせられるようです。ちょこっと試しただけですが、キーボード用スキームとゲームパッド用スキームを定義した状態でゲームパッドを接続せずゲームを開始、そしてゲーム実行中にゲームパッドを挿したところ、キーボードスキームからゲームパッドスキームに切り替わる動きをしました。

なお、Auto-SwitchはPlayerInput.neverAutoSwitchControlSchemesと対応しているようです。インスペクター上の項目名とプロパティ名の真偽が逆になっている通り、前者をオンにすると後者がfalseに、前者をオフにすると後者がtrueになるようです。

投稿2020/09/08 21:14

Bongo

総合スコア10811

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/09/09 05:59

ご回答ありがとうございます。 詳細に調べていただきありがとうございます。 Android実機のAnyのデバッグで、一度PCとAndroidを接続状態でBuildAndRunをし、AndroidにUnityアプリを送り、一度、Unityアプリを終了、PCとの接続を切り、Androidが他デバイスと接続しない状態で、Unityアプリを起動して実行してみる、ということを試してみましたが、それでもタッチに反応しないことを確認しましたので、Bongo様のおっしゃる通り、Android実機の場合は、Default SchemeをTouchscreenにしておきたいと思います。 Auto-Switchに関しましても、お調べいただきありがとうございました。 とても勉強になりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問