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

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

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

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

Q&A

解決済

1回答

2176閲覧

マルチディスプレイでモニター上の座標を取得したい

namari82

総合スコア11

Unity

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

1グッド

0クリップ

投稿2023/08/08 14:26

編集2023/08/08 14:47

実現したいこと

・ある特定のウィンドウの座標を「モニター」上での座標に変換したい。
スクリーン座標やワールド座標ではなく、タスクバーなど含むモニター全体において左下を(0,0)とした場合のモニターにおける座標を取得したい。
・ある特定のウィンドウの座標がマルチディスプレイにおけるどのディスプレイの上にあるかを判定したい。
・現在判定中のディスプレイの解像度を取得したい。

前提

・UnityでPCに常駐するデスクトップマスコットを作っています。
・マルチディスプレイ環境でも動作することを目指しています。(ここでいうマルチディスプレイとはウィンドウを複数同時起動することではなく、例えばモニター3枚を並べていても動くという意味です。)

試したこと

UnityのDisplayクラスが目的に一致するものだと思い、試行錯誤
→どうやらウィンドウを複数同時起動する際に使うクラスだったよう

using System.Windows.Forms;を使ってみる
→マウスのモニター上での座標を取得するのはSystem.Windows.Forms.Cursor.Positionによって行えた。
どうやらC#におけるクライアント座標とスクリーン座標を変換することができることも判明。
しかし、「C#におけるクライアント座標とスクリーン座標」↔「Unityにおけるスクリーン座標」の変換が結局分からず頓挫。

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

Unity 2021.3.28f1

YAmaGNZを押しています

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

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

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

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

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

y_waiwai

2023/08/08 23:08

わからない、とは具体的に、なにがどうわからないんでしょうか。 それがわからないと、答えようがないかと。
namari82

2023/08/08 23:18

「C#におけるクライアント座標とスクリーン座標」↔「Unityにおけるスクリーン座標」それぞれの取得はできますが、その2つを変換する関数などが見つかりませんでした。 特に「スクリーン座標」という単語がUnityとC#のSystem.Windows.Formsでそれぞれ違う意味のため検索が難しいというのもあります。
guest

回答1

0

ベストアンサー

ある特定のウィンドウの座標を「モニター」上での座標に変換したい。
スクリーン座標やワールド座標ではなく、タスクバーなど含むモニター全体において左下を(0,0)とした場合のモニターにおける座標を取得したい。

この「ウィンドウ」とはデスクトップ上に表示されるフォームのことですよね?
こちらはWin32APIを使用しての取得になるかと思います。
GetWindowRectというAPIがありますので、対象のウインドウハンドルを取得し、APIを呼べば座標が取得できます。
ただし、この座標は左上が原点の座標になりますので、左下を原点とした座標に変換する必要があります。

ある特定のウィンドウの座標がマルチディスプレイにおけるどのディスプレイの上にあるかを判定したい。

System.Windows.FormsにScreenクラスがあります。その中にFromPoint(Point) メソッドがありますので、こちらを利用すれば特定の座標があるScreenクラスが取得できます。

現在判定中のディスプレイの解像度を取得したい。

上記で取得したScreenクラスにBounds プロパティがありますのでこちらから取得できるでしょう。

「C#におけるクライアント座標とスクリーン座標」↔「Unityにおけるスクリーン座標」に関しても上記情報から得られるのもから計算する必要があるのではないかと思います。

投稿2023/08/09 03:48

YAmaGNZ

総合スコア10544

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

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

namari82

2023/08/24 12:19

ありがとうございます。こちら参考にして想定の挙動が行えました。GetWindowRect関数がそのものずばり今回の目的のものでして、助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問