[過去ログ] 【ゲームエンジン】Unity初心者質問スレBuild3 (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
856
(2): 名前は開発中のものです。 [sage] 2020/03/16(月) 09:55:12.73 ID:LdLDk6nR(1/3) AAS
Unity2018を利用しています。
uGUIでユーザインターフェースを実装しています。

クリックした場所へ移動するというMMOでありがちな操作方法で動いています。

GUIをクリックしたときは動かないようにしてあるのですが、GUIの閉じるボタンをファンクションで動作させると、
GUIが閉じた瞬間に閉じるボタンがあった場所へ向かって移動をしてしまいます。
どうも閉じるボタンのファンクションが実行され、パネルが閉じた後でクリックした場所のRaycastを取得してしまい、
移動が暴発してしまうようでした。

仕方なくパネルを閉じる場合はは閉じるボタンのファンクションではなく、プレイヤーを操作しているクラス内で
閉じるボタンがクリックされたかどうかを判定しパネルを閉じているのですが、
毎回GetComponentやらFindやら重い処理で閉じるボタンの判定することとなったり、
すべての閉じるボタンを保持しておいてRaychastで取得したボタンと一致するかどうかを判定する、
とかボタン登録の量から考えて非現実な手法であったり、
名前を統一してその名前で作られたボタンを閉じるボタンにする、としたら同階層で名前の違う閉じるボタンの実装が必要になったりと
うまくいきません。

何よりボタンのファンクションではなくプレイヤーの動作アクションのクラスでどうにかしようとしている所がスマートではないことが気になります。

どうしたら移動を暴発させずに閉じるボタンでパネルを閉じることができるでしょうか?
862
(3): 名前は開発中のものです。 [sage] 2020/03/16(月) 13:25:01.26 ID:LdLDk6nR(2/3) AAS
>>857
857(1): 名前は開発中のものです。 [sage] 2020/03/16(月) 12:03:58.90 ID:BLklYMyv(1/4) AAS
設計のやり直しするしかない。
まずは入出力のフローを整理することから。
申し訳ございませんが理解ができないのでもう少し詳しくお願いします

>まずは入出力のフローを整理することから。
この点ですが、クリックのたびにRayCastがGUIに接触しているかどうかの処理は毎回入れています。
しかし、閉じるボタンを押したときの挙動の場合
クリック→閉じるボタンのファンクション実行(GUIを閉じる)→Raycastの判定(この時点でGUIが閉じているため、RaycastにGUIが引っ掛からない)
という挙動となってしまいます。

この順番を入れ替えることができるということでしょうか?
クリック時に先にRaycastの判定さえ先行えれば即解決する問題なのですが、どうすれば順序を入れ替えられるのでしょうか。

>>858
858(1): 名前は開発中のものです。 [sage] 2020/03/16(月) 12:08:04.17 ID:BLklYMyv(2/4) AAS
または、クリックのたびに最後にウィンドウを押したのか、画面を押したのかフラグを持つか。
>または、クリックのたびに最後にウィンドウを押したのか、画面を押したのかフラグを持つか。
前述の通りRaycastの判定は毎回行っており、ここからさらにどこでフラグを立てればよいかがわかりません

仮に閉じるボタンの所にフラグを設けた場合、FindやGetComponentを使わずに
プレイヤー操作コンポーネントにフラグを送るため、全てのコンポーネントに参照を持つ、
もしくはプレイヤー操作コンポーネントのファンクション自体を閉じるボタンにしてしまう、
という方法ぐらいしか思いつかないのですが、
プレイヤーの操作を行わせるコンポーネントはDBサーバから取得したデータをもとに毎回インスタンス化しているため、
全部に動的に割り当てていくというのは現実的ではないように思われます。

良い方法があるのでしょうか? どうかご教示願います。
868
(1): 862 [sage] 2020/03/16(月) 15:18:30.98 ID:LdLDk6nR(3/3) AAS
>>863-865

ボタンとRaycastの判定がマルチスレッドで行われていることまで頭が向きませんでした。
ありがとうございました。

とりあえず修正が少なそうなコルーチンで想定通りの動きを起こすことができました。

同期ずれの方はこれでどうにかなるのかは不明ですが、今後問題になるようなら改めて大幅な修正をしようと思います。
単純に各メニュー画面を開いて処理させているだけなので、そんなに複雑なことをやっているつもりはないんで大丈夫だと思っていますが。>>863
863(1): 名前は開発中のものです。 [sage] 2020/03/16(月) 13:34:36.73 ID:ZW9c9VSl(1/2) AAS
>>856
自分はタイマー作って処理してるけど
UI上にマウスある時はタイマーの値が0.1とか小さな値が代入され続ける
これが0になるとキャラ操作可能になる
タイマー側は0以上だと絶えず減算し続けている仕組み
UIの動作が複雑になってくるとスクリプトの動作順や1フレーム単位での動機のズレで誤爆が起きたり起きなかったりして面倒な問題に
ウィンドウの開閉で問題が出やすいと思う
だから単純だけど誤爆が起きようが無いタイマーで数フレーのラグを稼いで操作を切り替えてるけど

前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.037s