0

UNET と UI をテストしています。パネルをシーンに配置すると、ホストクライアントでは問題ありませんが、パネルはリモートクライアントで別の位置にあります。

アンカーポイントなどを使用しています。

誰でも説明できますか?

ホスト クライアント ホスト クライアント

リモート クライアント リモート クライアント

アンカーポイント ここに画像の説明を入力

4

1 に答える 1

1

古い質問ですが、まだ答えるのに役立ちます。

主な可能性は 2 つあります。最も単純なのは、キャンバスが画面解像度/ウィンドウ サイズに適切に適応するように設定されていないことです。この場合、リモートとクライアントの関係はおかしなものであり、それは単純に、あるサイズでオーサリングしてから別のサイズで表示しているからです。ゲームにもよりますが、キャンバスを「画面サイズに合わせて拡大縮小」に設定し、高さを 100% に合わせるのが好きです。

もう少し陰湿なもう 1 つの可能性は、UI パネルの RectTransform がサーバーによって変更されていることです。これは、パネルに NetworkBehaviour が接続されていて、サーバーとクライアントが異なる画面サイズ/解像度で実行されている場合に発生する可能性があります。UI キャンバスは、実際には 3D 空間に存在するオブジェクトです。そのスケールは少し恣意的に見える傾向があり、CanvasScaler が UI をウィンドウに合わせて調整するときに設定されます。NetworkBehaviour オブジェクトは、シーンが構築されると無効になり、サーバーによって生成されると有効になります。このスポーン プロセスは、ワールドトランスフォームをサーバーが提供する値に設定しますが、もちろん、これはサーバー上の CanvasScaler に完全に依存しています。

現時点では、スポーンされたシーン オブジェクトは、その位置などが設定される前に有効になっています (これが常に当てはまるとは限りません)。したがって、 RectTransform の anchoredPosition と localScale の値を Awake() に格納することで問題解決できますその後、これらをOnStartClient()で再適用できます。または、すべてのネットワーク ビヘイビアーを子オブジェクトとしてではなく、ルート キャンバスにアタッチすることもできます。

それが誰かを助けることを願っています

于 2017-07-19T13:32:56.017 に答える