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

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

詳細はこちら
C#

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

Unity

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

Q&A

2回答

1898閲覧

クリックするまで処理を止めたい。

nankoko

総合スコア20

C#

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

Unity

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

0グッド

0クリップ

投稿2021/01/01 04:09

編集2021/01/01 15:52

デバッグの時に、問題があって処理を止めたい時に、
気軽にどんなメソッドでも1行書き足せば、そこで止まってくれて、
クリックで再開するようにしたいです。

void Start(){ for (int i=0; i<100; i++){ print( i++); WaitClick(); //ここに1行書くだけで処理が待機するようにしたい } } void WaitClick(){ //Input.GetMouseButtonUp(1)などの入力を待つ処理 } //実行結果 0 //クリックするまで待機 1 //クリックするまで待機 2

Startメソッドを、await/asyncにはしたくないです。
あくまで、WaitClick()のように、メソッド内に1行追加するだけで、
そこで待機するようにしたいです。

要は、IDEのデバッグで止めるのと同じような事をしたいのですが、
IDEで止めるとUnityの画面が固まってしまい、ゲームオブジェクトが大量にある時に、
シーンビューで選択してインスペクターで確認する事とかが出来ないので

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

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

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

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

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

guest

回答2

0

Debug.Breakを呼べば呼んだ次のフレームに移行する前にポーズしてくれるので、Inspectorなどは操作できる状態で処理を止めることができます。

ですが、このメソッドはあくまでも呼んだ瞬間ではなく、呼んだあとのフレーム移行時に機能するので
同じフレームのループ中などに呼んでもループの途中結果を確認することはできません。

非同期でないUnityのメインスレッド上の処理を止めれば同じメインスレッドで実行されているInspectorの更新処理も止まるため、非同期でない処理を即座に中断してInspectorで確認することはできません。
このような場合は、IDEのウォッチ式などを活用するのが良いと思います。

投稿2021/01/01 14:30

編集2021/01/01 17:13
Ram.Type-0

総合スコア424

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

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

nankoko

2021/01/01 15:41

お返事ありがとうございます。 ちょっと自分の質問が分かりにくくて、y_waiwai様や皆様に御迷惑おかけしています。。 ちょっと質問を修正しておきます。 >>asyncを付与しないといけないと何が問題になるのでしょうか? Startだと起点になるメソッドなので問題ないですが、 もしStartメソッドを呼び出してるメソッドがあった時は、 そちらもasyncにしないといけなかったりするので手間がかかってしまいます。 >>Startをコルーチンにすれば可能です。 Start自体は、コルーチンにしたくないんです。分かりにくくてスミマセン! この目的はデバッグで、問題があって止めたい時に、気軽にどんなメソッドでも1行書けば、 そこで止まってくれて、クリックで再開するようにしたいです。 (IDEのデバッグで止めてもいいのですが、それだとUnityのゲームオブジェクトが大量にある時に、シーンビューで選択してインスペクターで確認する事とかが出来ないので・・)
guest

0

AutoResetEvent ではどうでしょうか

投稿2021/01/01 04:26

y_waiwai

総合スコア88038

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

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

nankoko

2021/01/01 06:19

y_waiwai様、早速のお返事ありがとうございます。 色々調べてやってみました。 作成したThread内では、クリック入力でシグナル状態を変化させて止める事は出来たのですが、 既存のメソッドから、それらを記述したメソッドを呼び出して止めることは出来ませんでした。 自分のやり方が間違ってる可能性もあるのですが、、 もしお時間あるときに可能でしたら、簡単なサンプルコードを頂けたら大変助かるのですが。。 無理言って申し訳有りません。
y_waiwai

2021/01/01 06:35

話が変わってるけど、そういうことなら、 ManualResetEvent を使おう
nankoko

2021/01/01 06:49

ちょっと、自分のやりたいことが伝わってない気がしました。 Startメソッドから、WaitClick()を呼び出すような形で止めたいです。 Startメソッドを大きく改造するような事はしたくないんですが
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問