2019-05-06に更新

リアルタイム通信におけるダメージ処理の同期、ラグへの対策方法

2019/2/26

隙間時間にちょこちょこ進めた。

やった事は、

  • 開始のタイミングの同期

  • ダメージ処理の同期

  • プレイヤーデータの管理

の3つ。

開始のタイミングの同期

FightステートとArrangeステートの切り替えのタイミングを同期した。

RPCで実装していて、マスタークライアントのステートが切り替わるときに合わせる。

プレイ時間を、roomのカスタムプロパティを用いて記録するようにした。

が、まだどう使うかは分からない。

ダメージ処理の同期

ダメージを与えたときにRPCで同期するようにした。

そも、ダメージ処理の方法を2つ考えていた。

  1. 自分が攻撃を当てた時に、与えたダメージ同期する

  2. 自分が攻撃を食らった時に、食らったダメージを同期する。

ラグを考慮した時に起こるデメリットはそれぞれ、

  1. 敵の攻撃をよけたのにラグのせいでダメージを食らう

  2. 敵に攻撃を当てたのにラグのせいでダメージが入らない

このゲームでは、攻撃を「避ける」よりも「当てる」ことに注意が向いていると思った。

より注意が向いている方を気持ちよくしたいので、今回は2を採用してみた。

他のfpsゲームとかも見ているとこうなっているような気がする。

プレイヤーデータの管理

プレイヤーのデータはサーバーで管理する。

今回使うのはNCMB(Nifty Cloud Mobile Backend)だ。

タイトル画面で、プレイヤーデータの照合。

初プレイの場合は新規作成する。

作成したプレイヤーデータに対してNCMBでIDが自動生成される。

そのIDをPlayerPrefsで保存しておく事で2回目以降のプレイではそのデータを利用する。

あとは、作成したデータベースに必要に応じてカラムを追加するようにした。

今のところ、

  • プレイヤー名

  • プレイヤーID(ncmbのObjectidで代用)

  • 使用キャラクター

  • 解放済みキャラクター

  • コイン

  • ランク

  • プレイ時間

をデータとしてサーバーに保存するつもりだ。

今はプレイたー名のみ保存できる状態。

コメント

BorderLands2楽しい。

Originally published at questgames.hatenablog.com

QuestGames

全ては5年前に始まった。 QuestGamesはゲームを作る3人組です。 僕らの物語は現在執筆中です。ブログをご覧ください。

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

関連記事

コメント