問題タブ [lidgren]
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 で Lidgren Gen3 を使用するとエラーが発生する
Lidgren (gen3) の最新バージョンを GitHub から複製し、Mono の最新バージョンで Unity3d を使用していますが、Visual Studio 2015 も使用しようとしました。
Unity プロジェクトで Lidgren からコンパイルされた DLL を試すたびに、次のエラーが発生しました。
誰かがそのための解決策を持っていますか?
どうも :)
c# - Lidgren Createmessage() Write() と Read() 動的型、どうやって?
私は、lidgren を使用して独自のネットワーキングを書き始めました。私はとても遠いです。私の目標は、後で自分のマスター サーバー (lidgren にその例があります) と、サーバーをホストし、再び最も近い自動マッチメイキング サーバーを作成することです。
Unity Networking (簡単ですが制限があります)、UNet、その他の photon などにうんざりしています。Photonは素晴らしいですが、私の計画では高価です..そして、他の人は自動マッチメイキングを持っていません...または、サーバーにとどまるようにしたいと考えています.
さて、私は自分の考えと問題を説明しようとします。呼び出したい動的シリアル化メソッドを作成したい:
クライアントは、int、float、bool、vector3、vector2 など、さまざまなものを送信できます。
メッセージはサーバーに送られ、サーバーは他のクライアントに送り返す必要があります。クライアントには同じコードがありますが、サーバーにはありません。それで、どうすればこれを解決できますか。
この部分 (サーバー):
したがって、コードを見れば、私が何を試したいかわかるかもしれません。サーバーまたはクライアントのメッセージの長さとタイプが常に同じであるとは限りません。では、どうすればタイプを取得してすべてのクライアントに送信できますか?
c# - データを圧縮する必要があるのか、それともループが大きすぎるのか不明
ここの誰かが全体に光を当てることができることを願って、私は自分の問題に対する答えを探してグーグルのいたるところにいました。
さて、私は 2D オンライン RPG (ロール プレイング ゲーム。ファイナル ファンタジーを考えてみてください。ただし、オンラインです) に取り組んでいます。私はしばらくそれに取り組んできましたが、ちょっとした問題に遭遇しました。現在、圧縮によって問題が解決するかどうか、または単純にループが大きすぎるかどうかについては、100% 確信が持てません。
注: Lidgren Networking ライブラリを使用しています。Lidgren は圧縮をサポートしていないため、他のオプションに関する提案を受け付けています。
私がやろうとしていることに関するいくつかの情報:
マップのすべての情報を含むパケットを送信しようとしています。マップが小さいほど、パケットの速度は速くなりますが、250x250 のマップ (トップダウン、タイル ベース) を送信しようとすると、送信に数分かかります。
これには2つの理論があります。1 つは、その時点でマップのサイズがかなり大きい (約 5MB) ため、しばらく時間がかかるということです。もう 1 つは、マップが非常に大きいため、ループ自体に時間がかかることです。
マップには、文字列、バイト、int32、int16 などが含まれます。バイト配列を必要とする圧縮方法がありますが、すべてのデータをバイト配列に変換する方法について 100% 確信が持てません (私はC# を 1 年ちょっと使っていますが、完全に独学です)。
すべてを考慮すると、ループはかなり大きいです。4 つのタイル レイヤーがあり、すべてをループする必要があります。これが、ループが問題である可能性があると私に信じさせるものです。サーバーを起動すると、すべてのマップがキャッシュされます (つまり、パケットが必要になる前にパケットが作成されます)。そのため、クライアントがマップを必要とするときにマップを送信しても問題はないようです。正直なところ、かなり速いです。
しかし、マップを編集して保存するために送信すると、パケットがサーバーに送信され、サーバーが現在ログインして立っているすべてのクライアントに更新されたマップ パケットを送信するのにかなりの時間がかかる場合があります。その地図。正直なところ、少し時間がかかりすぎました。パケットの圧縮が役立つかもしれないと考えましたが、前述したように、それが問題であると 100% 確信しているわけではありません。
使用中のループは次のとおりです。
提供できるヘルプは大歓迎です。さらに情報を提供する必要がある場合は、それを行うことができます。
c# - リドグレンのサーバーラグ
Unity ゲームを作成しており、ネットワーキングに Lidgren を使用しています。クライアントが 1 つしか接続されていない場合は問題なく実行され、遅延や問題はありませんが、それ以上のクライアントが接続されている場合は、全員が極端な遅延を経験しています。権限のあるサーバーであるため、入力の登録と更新には時間がかかります。
誰でもよくある間違いや原因を教えてもらえますか?
すべてのクライアントが他のクライアントを見ることができることを確認しましたが、動きが自分のものであっても、動きを登録するのに最大 10 秒かかります (クライアント側の予測はまだありません)。
誰かが尋ねたらコードを投稿しますが、長くて混乱しています。
c# - Lidgren.Network の高レイテンシ
Lidgren.Network を使用してローカル サーバーに接続し、サーバーとクライアントの両方で 60hz 周波数でメッセージをプルしています。
問題は、平均ラウンドトリップ時間が約 2 ミリ秒で問題ないことですが、小さなメッセージを送信する場合、クライアントからサーバー、別のクライアントへの経路に 1 秒から 3 秒かかります。
メッセージの内容はたった 3 つの variableUint32 データです。
最悪のシナリオで私が間違っていなければ、パケットの最大時間は 32 ミリ秒 (サーバーによって処理されるのに 16 ミリ秒、他のクライアントで処理されるのに再び 16 ミリ秒) になるはずです。
c# - Diep.io に似たトップダウンのマルチプレイヤー ゲームで射撃を処理する最良の方法は?
Unity と Lidgren ネットワーク ライブラリ (サーバー - クライアント アーキテクチャ) を使用して、パースペクティブを備えたゲームを開発し、Diep.io に似ています。
私は両側で射撃をスムーズにしようとしていますが、待ち時間のため、射撃中にクライアントが動いている場合、クライアントは弾丸がプレイヤーから少し離れて作成されていることを確認できます (サーバーがクライアントから受け取った最後の位置)。
現在、クライアントはサーバーにパケットを送信し、サーバーはクライアントの位置に弾丸を作成します。
Diep.io のようなゲームは、目立った遅延なしに射撃をどのように処理しますか?
Diep.io に似たゲームでのシューティングをどのように処理しますか?
どんな助けでも大歓迎です。
c# - #if DEBUG #endif ディレクティブの間で nuget パッケージ コードを使用する方法は?
最新の .NET コア ターゲット Lidgren フォーク: https://github.com/soccermitchy/lidgren-network-gen3を使用しており、パケット損失/高遅延をシミュレートしようとしています。
ここにこれを行う方法に関するドキュメントがあります: https://github.com/lidgren/lidgren-network-gen3/wiki/Lag-Simulation。
これは、ネットピア構成をセットアップする方法です。
行:config.SimulatedLoss = 0.5f;
明らかにNetPeerConfiguration does not contain a definition for SimulatedLoss
.
ソース コードを確認すると: https://github.com/soccermitchy/lidgren-network-gen3/blob/master/Lidgren.Network/NetPeerConfiguration.cs#L468 SimulatedLoss が #if DEBUG # の間にあることがわかります。 endif ディレクティブ。
デバッグ専用の NuGet パッケージからコードを実行するにはどうすればよいですか?
Tools -> Debug などでいくつかのオプションを有効にしようとしましたが、どこにも答えが見つかりません。
この質問が以前に複数回行われている場合は、事前にお詫び申し上げます。