問題タブ [unity-networking]
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.
c# - サーバーなしで Unity3D に組み込みのマルチプレイヤー?
Unity3Dには組み込みのマルチプレイヤー機能があり、サーバーなしでサービスを提供できると聞きました。しかし、それに関する情報を見つけることができませんでした。私が見つけたすべてのチュートリアルは、Photon(PUD) または Google サービスでの作業に関するものでした。Photon が優れていることは知っているので、勉強を始めたばかりで、使用する計画があります。
ただし、One VS One Rock Paper Scissors ゲームのような、サーバーを使用しない非常に単純なアプリを作成したいと考えています。Photon を使用するとパフォーマンスが向上するはずですが、上記のように、場合によっては多すぎるように思えます。さらに、無料ユーザー向けの PUD の CCU はわずか 20 であるため、たとえばじゃんけんゲームなど、同時に 10 グループしかプレイできないことを意味します。
サーバーがなくても可能だという人もいれば、不可能だという人もいます。
何が正しいですか?
c# - すでに作成された箇条書きのリストを同期する UNET
現在、完全に同期されたスペース内を動き回るクリックして移動する機能を使用してスポーンするプレイヤーがいますが、弾丸を適切に同期させることはできません。
プレーヤーがスポーンすると、60 個の弾丸が作成され、その後非アクティブに設定され、アビリティがキャストされるまで保存されます。アビリティがキャストされると、弾丸はアクティブに送信され、すべてのクライアントとも同期するスクリプトがありますが、弾丸はローカル クライアントでのみアクティブに設定されるため、SyncPos スクリプトは実行されません。
別のゲーム オブジェクト (つまり、ネット マネージャー) にメッセージを送信してから、他のクライアントにメッセージを送信し、「これをアクティブにして同期できるようにします」と言う必要がありますか? もしそうなら、どうすればそれを行うことができますか。
unity3d - NetworkServer.Spawn なしの SyncVar
実行時に生成および構成されるオブジェクトのやや複雑なツリーがあります。これを行うために必要な情報はサーバーとクライアントの両方で利用できるため、両方の側でオブジェクトを個別に生成し、ネットワーク化された部分をリンクして後で同期できるようにしたいと考えています。
つまりSyncVar
、サーバーとクライアントに存在するが、最初は を介して生成されなかったオブジェクトを機能させる方法が必要NetworkServer.Spawn
です。Unity ネットワーク システムが何かが同じオブジェクトであることを理解できるように NetworkIdentity を手動で構成する方法はありますか?
私はネットワーク全体でこれらのオブジェクトを自分で一意に識別する能力を持っています。それを Unity に伝える方法が必要なだけです。NetworkIdentity.netId
読み取り専用なので、それはオプションではありません。
unity3d - オブジェクトをアクティブ化せずに NetworkServer.Spawn
を呼び出さずにクライアントでオブジェクトを生成したいAwake
ので、RPC を介して送信して最初に構成できます。これは可能ですか?
機能しないもの:
- 呼び出す前にサーバー オブジェクトを非アクティブ化する
NetworkServer.Spawn
- プレハブの無効化
ClientScene.RegisterSpawnHandler
デリゲートでのクライアント オブジェクトの非アクティブ化- -10 優先度コンポーネントの Awake でクライアント オブジェクトを非アクティブ化する (他の Awake は引き続き呼び出されます)
c# - Unet: クライアント権限で他のオブジェクトを生成する
私は、Unity の新しい Unet 機能を使用して簡単な三目並べゲームを作成し、Unet 機能の使用方法を学んでいます。
ボードを構成するために 9 つのスプライトを生成するブレイン コードがあり、クリックするとこれらが x に設定されるように取り組んでいます。[synchvar] を使用してスプライトの状態を追跡し、フックを使用して変更時に画像を変更し[SyncVar]
ます。サーバーを制御している場合、ゲームは完全に動作しますが、クライアントを制御している場合は何もしません。私が理解していることから、オブジェクトにローカル プレイヤー権限を追加し、[コマンド] を使用してこれを修正しますが、これは問題を修正していないようです。以下のコードは、私のスプライトに添付されているものです。質問には回答があり、以下のコードは修正を反映しています。
私のタイルは次のコードによって生成されます
私のプレーヤーオブジェクトには次のコードがあります
unity3d - Unity Network マテリアルの色の変更が機能しない
Network Identity と Network Transform を持つプレーヤー オブジェクトがあります。NetworkManager を持つオブジェクトでもあります。2台のPCを接続した場合。両選手の動きが見える。それは結構です。しかし、私のゲームには 2 つのボールがあります。緑と赤が1つずつ。
ボールの色を変更するコードは次のとおりです。
プレーヤーがボールを打つと、色が変わります。両方のプレーヤーに問題なく機能します。しかし、プレーヤーがボールの色を変えると、それは自分自身のために変わります。他のプレイヤー向けではありません。プレーヤーがボールの色を変えたときに、すべてのプレーヤーが同じ色に見えるようにしたい。ネットワーク ID を追加しようとして、「ローカル プレーヤー権限」を自分のボールにチェックしました。しかし、うまくいきませんでした。
unity3d - Unityネットワーキングで「大きなメッセージを送信できませんでした」
Unity は、NetworkBehaviour で OnSerialize をオーバーライドすることにより、より複雑なオブジェクトのカスタム同期を実行できることを提案しています。ただし、約 1500 バイトを超えてフィードしようとすると、NetworkWriter はあきらめてエラーを出すようです。
低レベルのコンテキストでは、ネットワーク メッセージにこの種のサイズ制限があることを期待し、それらを自分でチャンクします。ただし、HLAPI は OnSerialize でこれを行うために必要な機能を実際には公開していません。どうすれば回避できますか?