🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

1回答

731閲覧

Unity : NativePluginで実行した関数がWindowサイズを変更した時点で走る

YukiShimada

総合スコア17

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/12/14 04:27

Unityで「タッチパッドに指が触れたイベント」を取得したいと思い、NativePluginでそのようなコードを書いています。

ひとまず、Unity C#側からDebug.Logの関数ポインタをPlugin側に送り、「タッチパッドに指が触れるとDebug.Log(1)」、「タッチパッドから指が離れるとDebug.Log(0)」のようなコードを書きました。タッチパッドに触れたイベントを取得できたという点では割とうまくいっているようです。

しかし、タイトルのように、UnityのWindowサイズを変更するとDebug.Logが走っています。つまり、例えば5回タッチパッドに触れて離してを繰り返したとして、リアルタイムではDebug.Logは走っていません。しかし、UnityのWindowサイズを変更するとDebug.Log(0)が5回、Debug.Log(1)が5回、というように今まで発行された命令がまとめて走っているような感じです。

そもそものPlugin側のコードに問題もある、というのもあるでしょうが、とりあえず結果から推測するに、「イベントはちゃんと走っているが、実行されるべき関数はどっかのQueueかなにかに保存されており、Windowサイズが変更されたタイミングで全部実行されている」ようです。

Update関数の中で何かしらの処理を書けば解決しそう、とボヤっと思っていますがいまいちわかりません。EditorWindow.Repaintや、EditorApplication.QueuePlayerLoopUpdateみたいなものでいけるのかなー、これらも試してみましたが駄目そうです。
これを解決する方法をご存じの方がいらっしゃれば教えてください。

また、Windowサイズが変更されたときはどのような通知が来るのか、などもご存じであれば教えていただきたいです。

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

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

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

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

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

guest

回答1

0

javascriptで言うresizeイベントはないようです。

簡易的ですが、Start()でScreen.widthを取得して初期値を保存、
Update()内で現在値と比較するのではどうでしょうか?

投稿2019/12/14 06:24

編集2019/12/14 06:25
madone99

総合スコア1857

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

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

YukiShimada

2019/12/14 06:38

ご回答ありがとうございます。 すみません。少し語弊があったかもしれません。 タイトルは、「こういうものを実現したい」ではなく、「こういう問題が起きている」の方でした。 しかし、resizeイベントがUnityにないのにこのような挙動になっているのはかなり不自然です....resizeの際に起こる問題ではありますが、もっと別の原因がありそうです。ありがとうございます。
madone99

2019/12/14 07:48 編集

そうなんですね。読み違えてしまい失礼しました。 外部リソースにアクセスするので処理を非同期でやる必要があるかも知れませんね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問