問題タブ [unity3d-unet]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
103 参照

unity3d - RemoveClientAuthority() は 5.4.0 F3 でも壊れているようです。これはバグですか?...または私は何を間違っていますか

これはhttp://forum.unity3d.com/threads/re...ms-to-be-broken-in-5-2-1.359149/#post-2785856と同じ問題です

私の問題は次のとおりです。

1) オブジェクトにクライアント権限を割り当てます: AssignClientAuthority

2)オブジェクトを移動します。

3) RemoveClientAuthority を適用すると、オブジェクトはクライアント側の元の位置に戻ります。「TEST」呼び出しは、それが最後のオブジェクトに適用されるかどうかを確認するためのものです。

これはバグですか、それとも私が何か間違ったことをしているのですか?

これは私が行うテストのコード例です:

RPC:

Cmd_LocalAuthority:

0 投票する
1 に答える
1699 参照

c# - C# - 「プレイヤー統計」インスタンスのリストを同期する方法は? (団結)

それはおそらく初心者の質問ですが、私にとって重要です。また、興味深いトピックだと思います。

新しい Unity Multiplayer で C# を使用しています。ここでチュートリアルを見つけることができます: https://unity3d.com/learn/tutorials/topics/multiplayer-networking - 私はまさにそのベースに取り組んでいます。プレイヤーが参加またはホストするときに、「プレイヤーの統計」を「PlayerStats」クラスのインスタンスとして静的リストに追加するようにコードを作成しました。すべてのプレイヤーに対してこのように動作するはずです - 誰かが参加するたびに、彼の統計のインスタンスがリストに追加されます。

さて、このリストは 1 つのグローバルである必要があるので、サーバーによって同期される必要があると思いました。多分ある種のSyncVar、おそらくある種のSyncList。ここに問題があります。クラス インスタンスのリストを同期する方法はありますか?

Unity のドキュメントを確認しましたが、残念なようです。あるいは、私の理解が間違っているのかもしれません。SyncList は整数などの基本的な型しかないようで、構造体もありますが、サーバー全体の同期のために、プレーヤーの統計を含むクラスを構造体に変換する必要がありますか?

繰り返しますが、達成したいことは、新しく参加するプレーヤーが追加されて識別される、1 つのグローバルなプレーヤーのリストが必要なことです。私はすでに識別を行っています - 新しいインスタンスを追加している間、私はそのプレーヤーにID = PlayerList.Count - 1. ID は静的ですが、ローカルにする必要があります。PlayerList の要素が PlayerStats クラスのインスタンスである場合に最適です。したがって、各プレーヤーは (独自のインデックスで) ディスクからデータを PlayerList のインスタンスにロードします。その方が便利だと思いました(ただし、それ以外の方法はわかりません)。シングル プレイヤー モードでは機能しますが、マルチプレイヤー モードでは適切に設計する方法がわかりません。その静的リストはサーバー全体で、他のプレイヤーを認識している必要があるためです。

また、プロジェクト内のクラスで構成されている機器を同期する必要がある場合はどうでしょうか。

それを設計するのを何とか手伝ってくれませんか?新しい Unity マルチプレイヤー チュートリアルに基づいて、シンプルなマルチプレイヤー RPG を作成しようとしています。ここで、プレーヤーを識別し、そのデータを適切な場所にロードする必要があります。データは、キャラクター ジェネレーターによって既に生成されて保存されており、シングル プレーヤーでは既に適切にロードされています。プレイヤー データにはクラス PlayerStats のローカル シングルトン インスタンスを使用し、それらのインスタンスをサーバー全体のグローバル リストに保持する必要があると考えました。私の PlayerStats は PlayerStatsObject のコンポーネントです (gameobjectを持つ階層では空ですDontDestroyOnLoad)。シングルトン インスタンスに作成された PlayerStats クラスには、生成されたキャラクター全体と、バイタル、クラス、レース、クラスで作成された装備リストなどが含まれます。

したがって、基本的には、すべてのプレイヤーをリストに追加し、独自の PlayerStats を持ち、それらの PlayerStats を他のプレイヤー (および AI の敵/環境) が簡単に操作/変更できるようにする必要がありますが、それは簡単です。シングル プレイヤーです)。Player プレハブのコンポーネントとして PlayerStats を追加することは、私にはやり過ぎのように思えます。だから、それはのトンですGameObject.Find("Player").GetComponent<PlayerStats>();。悲惨なデザインになりそうです。

0 投票する
1 に答える
3634 参照

c# - Unity で NetworkServer の実際の接続数を取得する方法

Unity ゲーム プロジェクト用の単純なマルチプレイヤーを開発します。私は HLAPI から始めましたが、スポーン状態と同期状態が非常に遅いように見えるので、 https ://docs.unity3d.com/Manual/ の基本的な例から始めて、代わりに Unity インターネット サービスを調査することにしました。 UNetInternetServicesOverview.html . ここでの問題は古いリファレンスにあるため、問題の原因が私の誤解なのかバグのあるフレームワークなのかはわかりません.(

とにかく、最初の例を取り上げて、それを修正し始めたところ、サーバーの「接続」と「クライアント」の対応がわかりません。

すなわち、

  • メソッドで一致を作成しますnetworkMatch.CreateMatch
  • 次に、OnMatchCreateコールバックで値を確認しますNetworkServer.connections.Count-0です。
  • 次に、コールバックで作成された一致を呼び出しnetworkMatch.ListMatchesて確認します。これは 1 です。matchInfoSnapshot.currentSize
  • 同じコールバックをチェックインNetworkServer.connections.Countしましたが、まだ 0 です (!!!)。私はチェックNetworkServer.localConnections.Countします-それも0です。

OK、ローカル クライアントがサーバーへの接続を作成していないと推測しました (???)。確認してみましょう。

  • 次に、同じクライアントから呼び出しnetworkMatch.JoinMatchます-成功します。
  • 次にnetworkMatch.ListMatches、もう一度呼び出しmatchInfoSnapshot.currentSizeて、コールバックで一致を確認します。現在は 2 です。
  • 私は同じコールバックをチェックインNetworkServer.connections.Countします - そしてそれは今も 2 です (!!!) (ながらNetworkServer.localConnections.Count0 のままです)。

ですから、質問は簡単です - 私は愚かなカウンター変数を追加したくないのですが... サーバーに接続されているクライアントの実際の数を取得するにはどうすればよいですか?

PS: テストする簡略化されたスクリプト:

そしてそれはコンソール出力です: コンソール出力

0 投票する
3 に答える
1167 参照

unity3d - Unity 5.4 UNetWeaver エラー: ResolveMethod に失敗しました

空のプロジェクトでもこのエラーが発生しています。

Unity 5.4.03 を使用しています

0 投票する
1 に答える
1597 参照

c# - VR プレーヤー コントローラーがキャラクター コントローラーに表示されない

通常のキャラクターコントローラーユーザーVRユーザーが参加できるマルチプレイヤーゲームを開発しています。ユーザーが参加できるゲームには2つのモードがあります。

  1. ノーマルモード(キャラクターコントローラー)
  2. VR モード (HTC VR ヘッドセット)

私はこれらのモードを管理でき、ユーザーは任意のモードに参加できますが、問題は、これらのオブジェクトがキャラクター コントローラーの側でオフになるため、ノーマル プレーヤー (キャラクター コントローラー) が VR コントローラー (HTC Vive コントローラー) を表示できないことです。 では、VR プレイヤーが現在何をしているのかを VR コントローラーにノーマル プレイヤー側に示すにはどうすればよいでしょうか

(私が試したこと)オブジェクトを作成し、VR コントローラーに対してその位置と回転を模倣しようとしましたが、模倣ソース (VR コントローラー) オブジェクトがオフになっているため機能しません (通常のプレーヤー側では、VR モードで動作しています)そして彼らの立場は変わりません。unity3d で VR コントローラーを他のユーザーに見せるにはどうすればよいですか??

0 投票する
1 に答える
61 参照

networking - Unity3d HLAPI、Unet、ネットワーク対応スパウィニング

こんにちは、ネットワーク対応にしたい unity で最初のゲームを作成しようとしていますが、ネットワーク プレハブのスポーンに問題が発生しました。これが私のコードです:

コンパイラは問題はないと言っていますが、ユニティでは次のようなエラーが発生しました:「UNetWeaver エラー: Script Builder は [Command] CmdSpawnBuilding を使用していますが、NetworkBehaviour ではありません。UnityEngine.Debug:LogError(Object)」「[Command ]" 回線にもかかわらず、ネットワーク対応ではありません。また、少し混乱していることはわかっていますが、何が問題なのかを理解しようとしていたので、そうです、コードを少し混乱させました。