rumineria
@rumineria

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

マルチディスプレイのディスプレイ2から操作できない

解決したいこと

タッチパネル対応しているモニターを用いて
プレーヤーが操作する画面とスタッフが操作する画面に分けたいと思っています。

青いボタンが押されると、「New Text」が「押された!」に変わる仕様を作っています。
スクリーンショット 2024-03-20 200630.png

Canvas,Canvas2ともにRenderModeはScreenSpace-Cameraであり、
CanvasはMainCameraに、Canvas2はSubCameraにRenderしています。
MainCameraはディスプレイ1に、SubCameraはディスプレイ2に表示します。

CanvasとCanvas2はレイヤーが分かれており、MainCameraにはCanvas、SubCameraにはCanvas2のみが映ります。

スクリーンショット 2024-03-20 202127.png

ゲームビューからディスプレイ2に切り替えてボタンを押すと確かにテキストは変わるのですが、ビルドして実行してみるとボタンのある位置を押しているはずなのにテキストが変わりません。

マルチディスプレイの配置は以下の図のようになっています。
スクリーンショット 2024-03-20 200856.png

現在はボタン1つだけですが、プレイヤー画面でもスタッフ画面でも操作(クリック)が必要なものにしたいと考えています。
解決する方法はないでしょうか。どうかよろしくお願いします。

自分で試したこと

最初はMainCameraとSubCameraの位置と描画範囲、CanvasとCanvs2の位置、大きさをそろえて試したのですが、うまくいきませんでした。

スクリーン座標の問題ではないかと思い、プレイヤー操作用の画面(テキストが書いてある方)とスタッフ操作用の画面(ボタンがある方)の配置をできる限りマルチディスプレイの配置に近づけようとして試しましたがやはり反応しませんでした。(上の画像は配置変更後のものです)

ですが、これはうまく座標が合わせられなかっただけかもしれません。座標を合わせることで機能するのであれば、その合わせ方を教えていただきたいです。

追記
マウスカーソルをディスプレイ2の画面まで持っていき、そこでボタンをクリックした際には問題なく動作しました。
またディスプレイ2をタッチした際の座標とマウスカーソルをディスプレイ2に持っていった際の座標を比較したところ同一でした。

0

1Answer

手元にタッチパネル対応のディスプレイがないので検証ができず若干想像の部分もあるのでご容赦ください。

Unityでは、マウスクリックと画面タッチの処理が分かれているはずなのですが、ボタン2の押下処理は両対応で書かれていますか?
タッチパネルがマルチタッチ方式に対応したものだと、クリックでなくタッチとして処理されていると思います。

0Like

Comments

  1. @rumineria

    Questioner

    回答ありがとうございます。

    ボタンはUI LegacyのOnClickをそのまま使っていました。
    EventTriggerのPointerEnter,Up,Downをタッチパネルでそれぞれ試してみたところ
    Enter→ボタンの上に指を乗せたら実行される。同じボタンを連続で押しても反応しないが、ボタン外のタップを1度挟むとまた反応
    Up→反応せず
    Down→タッチパネルへのタッチが初めての場合のみ反応、それ以外では反応せず
    となりました。

    これは推測ですが、タッチパネルにタッチすると押し込んだ判定になるのに、タッチパネルから指を離しても離した判定にならないのだと思います。
    タッチパネルはスタッフ操作用なので、ボタンを連続タップするときはボタン外のタップを挟む、とすればなんとか動かなくはないと思いますが、できるならばそういったことを挟まず連続タップに対応させたいです。

    お力添えをいただけますと幸いです。

  2. こちらでも簡単なアプリを作ってみて実験をしました。ただ、タッチパネル対応のディスプレイがなかったため、スマートフォンで代用してみました。

    ボタンはUI>Legacyのものをお使いということでよろしいでしょうか?
    こちらのテスト環境は以下のとおりです。
    ・2Dテンプレート使用
    ・Canvas配下にButtonとTextを配置
     ・Button(Legacy)
     ・Text(Legacy)
    ・Manager(空のゲームオブジェクト)+C#スクリプト(ボタンタップ時の処理)
    なお、ButtonのOnClick()イベントにManagerを登録して、さらにスクリプト内のメソッドを指定しています。

    実験したところ、ボタンをタップして指を離した瞬間にテキストが変更されました。こちらではPC用ディスプレイではないですし、処理もEventTriggerを使用していないためかもしれませんが再現はしなかったですね…。あまりお力になれないかもしれません。

  3. @rumineria

    Questioner

    ありがとうございます。
    設定は仰る通りです。
    正確に言いますとこちらも現在はspace deskでパソコンとiPadやAndroid(Xperia)を接続してサブディスプレイとしておりました。
    パソコンのシステムからiPadをメインディスプレイに設定し、iPadにスタッフ画面が、パソコンにプレイヤー画面が映るようにして試してみたところ、メインディスプレイであるならばタッチした際にOnClickが反応するようです。

  4. なるほど、PCと有線で接続されたディスプレイではなく、タブレットやスマホをセカンダリのディスプレイにされているのですね。そういう特殊な状況なら通常のディスプレイと挙動が変わってしまうのはありえますね…。
    現状、こちらの環境ではspacedeskを使用することができないため、挙動の確認を行うことができない状況ですね…申し訳ございません。

Your answer might help someone💌