Slide 1

Slide 1 text

ゲーム業界の通信の未来を語る 2019/10/10 STN vol.7 ~次世代のゲーム体験はどう変わるのか~

Slide 2

Slide 2 text

01 はじめに サムザップテックナイトとは 実務で活かせるライブ感ある情報の発信と ゲーム業界に関わる人と人との交流を通じ、 ゲーム業界全体の発展を目指す場。

Slide 3

Slide 3 text

いつでも快適に遊びたい! リンクスリングスの ネットワーク遅延との付き合い方 株式会社サムザップ 二宮 章太 03 サムザップ 登壇

Slide 4

Slide 4 text

自己紹介 二宮章太 ● 2015年入社 ● リンクスリングスのバトル部分を担当 ● PhotonServer/Unity

Slide 5

Slide 5 text

リンクスリングス

Slide 6

Slide 6 text

リンクスリングス

Slide 7

Slide 7 text

遅延対策

Slide 8

Slide 8 text

大事にしていること 自分の思い通りに 操作する気持ちよさ 反応速度を重視 ● すぐに最高速度で移動する ● すぐに振り向く ● すぐに攻撃が出る

Slide 9

Slide 9 text

速度重視のコマンドを 最速で放つ ● 入力を受けたらすぐに 移動・回転・スキルを発動する ○ サーバは経由させずに即実行! ● 遅延によるズレは 致命傷にならないように工夫

Slide 10

Slide 10 text

遅延によるマイナスを減らす 「避けたはずなのにダメージを受けた」をなくす ● 当たってないのに被ダメ判定は理不尽 ● ダメージを受ける側で当たり判定を行う

Slide 11

Slide 11 text

攻撃がスカる? コリジョンを工夫する ● 実際の攻撃エフェクトの 見た目よりも当たり判定を広く取る ○ 誤判定と思われない程度の広さ ○ キャラ0.5~1人分程度大きくする (拡張幅はゲームスピードに依存) ○ 敵に向かって突進する速度や角度を うまく調整し、ヒットタイミングを 誤認させる

Slide 12

Slide 12 text

ヒット演出 ダメージテキスト ● ヒット判定をもらってから表示 ○ 反応速度 < 判定の正しさ ○ 人間の反応速度を 計算に入れておく (ヒットの認識 →ダメージ表示の確認)

Slide 13

Slide 13 text

ヒット演出 ヒットしたら爆発する球 ● ローカルで処理 ○ 通過してから爆発は許容できない ○ 判定の正しさ < 気持ちよさ ● 稀に出る副作用 ○ 仲間の近くを弾丸が通過!球の爆発はしてないが、 吹き飛ぶ仲間。あいつ、、、何にやられたん だ、、、、!! ○ 敵を射撃!球が爆発!やったぜ!!ノーダメージで 走りこんでくる敵!ぎゃああああああ

Slide 14

Slide 14 text

ヒット演出 例)スキル使用後、敵に向かって突撃し、 接敵したらストップ&攻撃するスキル ● ヒット判定をもらってから ストップ&攻撃の処理をするとダメ ○ ローカルで処理をすると、 攻撃が届かない、ラグで当たらない ● 多少通過するのはコリジョンを工夫 ○ 攻撃演出のあるエフェクト上以外も キャラ周辺にもコリジョンを設置 ○ キャラ周辺のコリジョンは ○ 後ろ方向に広めに取る

Slide 15

Slide 15 text

ラグの上限を設定 RTTに閾値を設けて、通信環境が回復するまで動けなくする ● 当初はRTT 250程度 ● 電車でプレイするとどこかしらで動けなくなった ● 現在はRTT 350程度まで許容 ● 瞬間移動するユーザが報告されたりする

Slide 16

Slide 16 text

切断対策

Slide 17

Slide 17 text

切断しやすいゲームとは? ネットワークは同じなのに、 アプリによって切断しやすいしづらいが存在する。 ● RUDPの仕組みに着目 ● PhotonのRUDP ○ 到達保証 ■ 必ず届く ○ 順序保証 ■ 送信した順にアプリケーションに届く

Slide 18

Slide 18 text

切断しやすいゲームとは? 到達保証?必ず届く?? ● UDPは通信ロストがありうる ● Photonの実装 ○ Ackで到着確認 ○ 再送機能 ○ ダメなら切断 到達保証を多用すると通信の瞬断に対してシビアになる

Slide 19

Slide 19 text

到達保証通信を減らす 通信頻度を考える 1. 移動 2. 陣取り 3. スキルなどその他 ● 移動 ○ ロスト許容 途中抜けても最新が合えばOK ● 陣取り ○ 端末間で陣の状態がずれるのは困る ○ サーバへの送信はロストしても構わない

Slide 20

Slide 20 text

山手線チェック チームメンバーで山手線に乗り込み移動しながらプレイ 通信が切れてしまうような場所を除けば 切断されずにプレイ可能なことを確認! いける、、、!!!

Slide 21

Slide 21 text

甘かった ● 陣取りは数フレームおきに発生 ○ 絶えず到達保証の通信が発生 ● 短い瞬断であっても確実に切断してくる ● 山手線の回線は実は良かったようだ、、 ● もはや切断は仕方ない ● 再接続だ というわけでリコネクト機能の実装が決定!

Slide 22

Slide 22 text

リコネクト サーバ側でゲームの状態を保持しておく 1. 再接続を検知 2. サーバから最新のゲーム状態を配布 3. 以降は通常の接続時と同じ通信を行う 現在絶賛バグチェック中! 近日のアップデートでリリースされる予定です!

Slide 23

Slide 23 text

リコネクト(おまけ) 苦労 ● もともとサーバにデータが揃っていないところからスタート ● 状態の補完機能もなかった ● リコネクトしないと機能を試せないのはえぐい デバッグツールを作成 補完処理の実装と その後の開発をサポート

Slide 24

Slide 24 text

リコネクト(おまけ) 後から考えるとものすごく大変 状態補完機能は強力な開発サポートツール リコネクトは最初から考慮に入れましょう

Slide 25

Slide 25 text

まとめ ● 思い通りに操作する気持ちよさを重要視 ○ コマンドの反応速度は必須 ○ 重要なコマンドは最速で気持ちよく実行 ○ ラグによるズレを許容するための仕組みを紹介 ● 切断対策 ○ 到達保証通信を出来るだけ使わないこと ○ リコネクトは必須。超大事。