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

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

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

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

Q&A

解決済

2回答

4641閲覧

Unityのマウスクリック動作について

seri

総合スコア422

Unity

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

0グッド

0クリップ

投稿2016/05/19 23:43

現在、外部機器からの信号をマウスクリックの変わりに使用しているのですが
スクリプトを書く上で、綺麗にまとめたく思いまして以下のような実装にしています

C#

1public bool a=false; 2public static void Button(){ 3a=true; 4a=false; 5}

外部機器からの入力が送られてきた時にButtonメソッドが読まれると思ってください。

他のスクリプトからBool値aを読みこみ、マウスクリックのような動作を実行したいのです、が、、このままだと、他のスクリプトからaの値を読み込む時にはaはfalseになってしまっています。

どのような実装をすればよろしいのでしょうか。。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2016/05/20 20:41

質問がよくわかりません aがfalseになるのは関数内でfalseを代入しているからではないですか? a=falseを別に記述する必要があるというのはなぜですか? 面倒とはどういったことなのですか?
seri

2016/05/20 22:41

動作としては、外部機器からのclick➡a=true➡他の処理➡a=false としたいのですが、これだと、 外部機器から信号が送られてくる時a=trueとして if(a){---}といった処理を書くたびに、最後にa=falseとしなければなりません、これだと手間なので、一つのメソッドにしてしまいたいとゆう事です
guest

回答2

0

ベストアンサー

Button()が呼ばれた後は一度しか値aを取得しに行かず、かつ毎フレーム必ず値aを取得しに行くという前提があるのでしたら、
bool値aの取得プロパティを作成し、取得されたら必ずfalseにするという方法がとれます。

C#

1// aを取得する際は、変数aをそのまま取得するのではなく、プロパティAを経由するようにする。 2private static bool a = false; 3public static bool A 4{ 5 get 6 { 7 // 取得したら必ずfalseに戻す 8 bool temp = a; 9 a = false; 10 return temp; 11 } 12} 13 14public static void Button() 15{ 16 a = true; 17}

ただし、上記の前提以外の場合では以下のような不具合が発生してしまいます。

  • 複数の箇所で値aを取得する場合は、最初しか値aが取得できない。
  • 毎回値aを取得しないと、Button()が呼ばれていなくても値a == trueが残ったままになる。

そのため、できることならばフレームの一番最初、または一番最後あたりに値aを元に戻す処理を記述するほうがよいと思います。
コメント欄にあるように値a取得者の全てが値aを元に戻す必要はないと思います。
どれかプロジェクトを代表とするスクリプトに毎回値aを元に戻す処理を書けば、あまり手間にはならないのではないでしょうか。

投稿2016/05/20 23:39

urahimono

総合スコア714

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

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

0

関数内の a=false; は良くないのではないでしょうか?

投稿2016/05/20 06:06

kobaya_c

総合スコア30

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

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

seri

2016/05/20 18:16

この位置に書かなった場合、Buttonメソッドを呼び込んだ後、a=falseを別に記述する必要があり、面倒な事が増えます。このような面倒な処理を減らしたいのです。
kobaya_c

2016/05/25 03:50 編集

Buttonメソッドの処理中、他の所から a には干渉できないとお考えください。 なので、Button メソッドは結果的に必ず a を false にしてしまいます。 Button メソッドは a を true にするに留め、ボタンを離した時に a を false にするメソッドを作るなど、false にする処理は別に用意すべきです。 押下状態を獲得する処理が一箇所だけでいい、という場合は urahimono さんが示された方法でもよさそうです。 @rev1: 関数→メソッド
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問