------乗ゲームデザインのビジョン制御

------乗ゲームデザインのビジョン制御

参考URL:httpsを://blog.csdn.net/qq_36748278/article/details/102787225

背景

プレーヤーの視点の背景

すなわちAOI(対象エリア)、関心領域。これは、シーンは、プレイヤーのAOIの動きに伴って変化することを、確認するためにリアルタイムでゲーム内の面積のプレイヤーとみなすことができます。ゲームでは、多くのシーン(マップ)があるだろう、各マップはプレイヤーやNPCをたくさん持っている、ビューデータは、相互で、我々はプレイヤーBプレイヤーA、プレイヤーBもそのプレイヤーAを参照してくださいすることを見ることができます マップで動作しているときにプレイヤーが何らかの行動を行うと、あなたがプレイヤーの行動が見られるようにしたい場合は、マップ内のすべてのプレイヤーにプレイヤーの行動を放送する必要があります。プレイヤーは、このように他のすべてのプレイヤーにブロードキャストシーンに変更する限り機能しているシーンが最良の方法ですか?

  • そのようなチームのコピーなどと上のように選手のシーン、数が少ないのいくつかのために。プレイヤーはそれがフルフィールドシーンと呼ばれることができ、すべてのプレイヤーやNPCのマップが表示されます。このシナリオでは、道のシーンの放送に他のプレイヤーを取るために、シングルプレイヤーのアクションが実行可能であるがあります。
  • いくつかの大規模なPVPプレイのために、同じシーンは、参加する人々の数百あるいは数千は、1000人の合計は、シーンに出席仮定があります。長い移動のように任意のプレイヤーが同時に動く千人が、サーバーのニーズがn * n個に相当999 * 999(百万レベル)のメッセージを処理するために999人の残りの部分に放送する必要があります。大量のデータの蓄積が簡単にサーバーメッセージ原因、タイムリーに応答しないように移動するシーンでは誰もが、そのようなプレイヤーのスキルのリリースとして他の行為の同期動作を考慮していない、百万レベルのデータを生成します。同時に、全てのプレイヤーは、おそらくクライアントカトンを引き起こすために、リアルタイムの情報、他の1000人の選手を処理するクライアントは、メッセージ・ハンドル場合は、しかし、失われたデータパケットにも表示されます。パケットの膨大な数は、クライアントに送信するだけでなく、大量のトラフィックを消費しながら。これは、ゲームの経験が非常に悪くなり、確かに私たちが望む方法ではありません。

私たちはゲームで、プレイヤーは常にビジョンは選手の動きと同時に移動する、プレイヤーの移動に伴って、画面の中央に表示されますが、選手たちは常に中心にあることがわかります。プレイヤーがゲーム画面を見ることができ、周囲の情報のプレイヤー中心エクステンション360度図です。AOIを変更するプレイヤーならば、プレイヤー制御画面の中央には、すべてのオブジェクトがプレイヤーのビューデータと呼ぶ見ることができるので、他の人の行動プレイヤーが操作したとき、プレイヤーにのみ通知シーンに関して、視野を通知する必要がありますすべてのプレイヤーは、不要なプッシュメッセージの多くを減らすことができ、また多くのトラフィックを保存することができます。他のユーザーが離れすぎている現在の画面上にないので、これらのプレーヤーへの通知の範囲内でプレイヤーの行動の営業は、プレイヤーのは意味がありません。
このシナリオでは、すべてのプレイヤーが一緒にすべてのプレイヤーは、シーンを上司を再生している場合しかし、その後、プレイヤーの現在のビューデータ画面は、シーン内のすべての選手になっています。私たちはプレイヤーの視界の上限を制限する必要があるように、クライアントのパフォーマンスによって制限され、同時に、クライアントは、天井のスクリーンを持つ人の数が最も多いです。優先順位によってフィルタにシーンセット(社会関係、敵対関係、距離など)で一緒にすると、すべてのプレイヤーは、ビジョンオブジェクトのプレイヤーのフィールドでカウントオブジェクトの指定された数をスクリーニングしました。

そのため、大規模なPVPの遊び活動のため、多くの時間におけるシーンの数、ビジョンのプレイヤーのフィールドは、ビジョンの天井の制限を使用した場合、プレイヤーのビジョンの360度視野のプレイヤーが指定した範囲は、道の中央に設定されています。、プレイヤー中心周囲360度に拡張、プレイヤは、プレイヤは、円形領域の中心に基づいていてもよい、正方形領域の中心に延びていてもよいです。しかし、正方形によるマップは、外向きに拡張最高の選手を中心とした正方形領域360にかかるように、臨界点の円形の範囲の座標を計算するには適していない場合。プレイヤー中心の正方形の面積である私たちは、正確に周りを見つけることができます。したがって、中央の正方形領域が3×3の正方形に分割することができるだけのプレーヤと、マップ領域のそれぞれの分割、グリッドの中心にプレーヤーに応じて考えられます。そして以上二乗面積は、各マップグリッドの合理的設計長さに状況に応じて、ゲーム画面の表示領域が必要となります。このように、プレイヤーのビューデータストレージは、正方形の形をとることができます。

ここに画像を挿入説明

マップ

地図グリッド部門

ゲームでは、マップのサイズは、正方形であり、(CMにゲームの両方で)水平面内においてX軸、Z軸です。分割されたブロック単位で例えば7Mのように指定されたサイズの複数にグリッドマップ(グリッドサイズの単一の長さの実際の大きさに応じてMAP)。マップは、プレイヤがプレイヤの座標点をタイルによって計算することができるマップの複数のタイルに分割された後。
X軸方向に分割され、X軸は、各ブロックのサイズは7M、次いで、X軸、タータンの合計数であると仮定すると、256メートルの全長をマッピング?= 36.57142857142857 7分の256は、格子を直接格子、36 + 1 = 37グリッドのX軸合計、Z軸共感に従って計算満たしません。各ブロックのサイズは8メートルであると仮定すると、32 = 8分の256は、わずか32個のブロックに分割されてもよいです。地図固定サイズ、異なるサイズのブロックは、格子の数を与えない、といくつかの分割であってもよい場合、いくつか割り切れない、すなわち、切り上げ(カウント割り切れないサイズ1を満たしていません)。格子グリッドの数を各部門のために計算されたマップの長さ/長さ+ 1を使用して、均一なアプリケーションプラス1、すなわち、分割可能か否かを判断条件を回避することができます。だから我々は、グリッドの総数は常にマップのシーンよりも大きくなる分割しました。*マップのサイズは256メートル* 256メートルであり、各グリッドの大きさは7メートルであると仮定すると7M、以下に説明される大きさに応じています。

  • グリッドの総数はX_AREA_NUM_PER_MAP X軸=マップの長さ/ X軸+ 1のそれぞれの格子長さをX軸
  • グリッドの総数=各グリッドのZ_AREA_NUM_PER_MAP Z軸Z軸長マップの長さ/ Z軸+ 1
  • あり、全体マップグリッド番号MAX_DYN_AREA_NUM = X_AREA_NUM_PER_MAP * Z_AREA_NUM_PER_MAP + 1(ここでは、セキュリティ上の理由から、格子を追加)

すべてのマップグリッドを格納するためのゲーム1次元配列を使用することができます。格子番号--1 =配列の添字は、ビューの対象フィールドの対応するブロックを取得することができ、インデックスID、(ビュー格子のフィールドは、対象ブロックとみなすことができる)によって共有メモリに対応するアレイに格納され得ます。

ビュー(グリッド)配列と以下のように関連する被験者のブロックマップフィールド:
ここに画像を挿入説明

ポイント位置決めブロックの選手の位置座標

そのポイントの特定の座標に応じてグリッド内であるプレーヤーどのように見つけますか?
カラムX軸方向:格子の第1の範囲[0,7)、第2の格子範囲[7,14)、第3グリッド範囲[14,21)...
Z軸行方向:格子の第1の範囲〔0,7)と、第2の格子範囲[7,14)の範囲内の第3グリッド[14、21)···

座標POS(8、100、15)は、公知のプレーヤーは 、 マップのサイズは256メートル* 256メートルとし、グリッドサイズは7メートル* 7メートルです。
二次元配列することができる最初の添字分析:
Xは格子X = 8/7 = 1の数であり、X軸は、即ち、X軸格子カラム2(図)において、X軸アレイ1を添字
でZ軸、ZはZ = 15/7 = 2、即ち、格子Z軸(図)における層3,2のZ軸配列添字である格子の数
選手のアレイが算出された2次元配列の添え字によれば、添字:Z * X_AREA_NUM_PER_MAP + X = 2 * 37 + 1 = 75
ここに画像を挿入説明

関係マップ、ビジョン・ブロック、プレーヤー

ここに画像を挿入説明
ゲームシーンの多くを持つことになります。
マップリソースへの各シーン相当し、
各マップ上の複数のセルに分割され、各グリッド・ブロック・オブジェクトは、ビジョンであり、
各フィールドやNPCのブロックの上に多くのプレイヤーが存在します。

プレイヤーのビュー

プレイヤーのビューは2例次の変更の対象となります

  • アクティブ:ビジョンプレーヤーの操作は、リフレッシュ原因:
    プレイヤーはマップを入力し、ビジョンのプレイヤーのフィールドには、情報を検索します。
    プレーヤ移動すると、ビューのブロックフィールドの他のブロックに一つのフィールドから移動する(同じグリッドに移動された場合、ビューのフィールドが更新されません)。
  • パッシブ:ビジョンのプレイヤーの分野における変化の他の原因:
    他のプレイヤーの視界を残す/入力する、それが彼らのビジョンの変化を引き起こす可能性があります。

プレイヤーの移動は、ビューのリフレッシュの場の状況につながる可能性

ここに画像を挿入説明
ここに画像を挿入説明
ここに画像を挿入説明
ここに画像を挿入説明
ここに画像を挿入説明
ここに画像を挿入説明
ここに画像を挿入説明
ここに画像を挿入説明
ここに画像を挿入説明

コードの実装

特定のプレイヤーのビュー更新ロジックに関連して、上記のURLを参照するために参照してください。

githubのアドレス

公開された155元の記事 ウォン称賛15 ビュー160 000 +

おすすめ

転載: blog.csdn.net/wangdamingll/article/details/105207975