Upgrade to Pro — share decks privately, control downloads, hide ads and more …

いつでも快適に遊びたい!リンクスリングスのネットワーク遅延との付き合い方

 いつでも快適に遊びたい!リンクスリングスのネットワーク遅延との付き合い方

Sumzap TECH NIGHT vol.7 の発表資料です。

CyberAgent SGE Engineer

October 10, 2019
Tweet

More Decks by CyberAgent SGE Engineer

Other Decks in Technology

Transcript

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  4. 自己紹介
    二宮章太

    2015年入社

    リンクスリングスのバトル部分を担当

    PhotonServer/Unity

    View full-size slide

  5. リンクスリングス

    View full-size slide

  6. リンクスリングス

    View full-size slide

  7. 遅延対策

    View full-size slide

  8. 大事にしていること
    自分の思い通りに
    操作する気持ちよさ
    反応速度を重視

    すぐに最高速度で移動する

    すぐに振り向く

    すぐに攻撃が出る

    View full-size slide

  9. 速度重視のコマンドを
    最速で放つ

    入力を受けたらすぐに
    移動・回転・スキルを発動する

    サーバは経由させずに即実行!

    遅延によるズレは
    致命傷にならないように工夫

    View full-size slide

  10. 遅延によるマイナスを減らす
    「避けたはずなのにダメージを受けた」をなくす

    当たってないのに被ダメ判定は理不尽

    ダメージを受ける側で当たり判定を行う

    View full-size slide

  11. 攻撃がスカる?
    コリジョンを工夫する

    実際の攻撃エフェクトの
    見た目よりも当たり判定を広く取る

    誤判定と思われない程度の広さ

    キャラ0.5~1人分程度大きくする
    (拡張幅はゲームスピードに依存)

    敵に向かって突進する速度や角度を
    うまく調整し、ヒットタイミングを
    誤認させる

    View full-size slide

  12. ヒット演出
    ダメージテキスト

    ヒット判定をもらってから表示

    反応速度 < 判定の正しさ

    人間の反応速度を
    計算に入れておく
    (ヒットの認識
    →ダメージ表示の確認)

    View full-size slide

  13. ヒット演出
    ヒットしたら爆発する球

    ローカルで処理

    通過してから爆発は許容できない

    判定の正しさ < 気持ちよさ

    稀に出る副作用

    仲間の近くを弾丸が通過!球の爆発はしてないが、
    吹き飛ぶ仲間。あいつ、、、何にやられたん
    だ、、、、!!

    敵を射撃!球が爆発!やったぜ!!ノーダメージで
    走りこんでくる敵!ぎゃああああああ

    View full-size slide

  14. ヒット演出
    例)スキル使用後、敵に向かって突撃し、
    接敵したらストップ&攻撃するスキル

    ヒット判定をもらってから
    ストップ&攻撃の処理をするとダメ

    ローカルで処理をすると、
    攻撃が届かない、ラグで当たらない

    多少通過するのはコリジョンを工夫

    攻撃演出のあるエフェクト上以外も
    キャラ周辺にもコリジョンを設置

    キャラ周辺のコリジョンは

    後ろ方向に広めに取る

    View full-size slide

  15. ラグの上限を設定
    RTTに閾値を設けて、通信環境が回復するまで動けなくする

    当初はRTT 250程度

    電車でプレイするとどこかしらで動けなくなった

    現在はRTT 350程度まで許容

    瞬間移動するユーザが報告されたりする

    View full-size slide

  16. 切断対策

    View full-size slide

  17. 切断しやすいゲームとは?
    ネットワークは同じなのに、
    アプリによって切断しやすいしづらいが存在する。

    RUDPの仕組みに着目

    PhotonのRUDP

    到達保証

    必ず届く

    順序保証

    送信した順にアプリケーションに届く

    View full-size slide

  18. 切断しやすいゲームとは?
    到達保証?必ず届く??

    UDPは通信ロストがありうる

    Photonの実装

    Ackで到着確認

    再送機能

    ダメなら切断
    到達保証を多用すると通信の瞬断に対してシビアになる

    View full-size slide

  19. 到達保証通信を減らす
    通信頻度を考える
    1. 移動
    2.
    陣取り
    3. スキルなどその他

    移動

    ロスト許容 途中抜けても最新が合えばOK

    陣取り

    端末間で陣の状態がずれるのは困る

    サーバへの送信はロストしても構わない

    View full-size slide

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

    View full-size slide

  21. 甘かった

    陣取りは数フレームおきに発生

    絶えず到達保証の通信が発生

    短い瞬断であっても確実に切断してくる

    山手線の回線は実は良かったようだ、、

    もはや切断は仕方ない

    再接続だ
    というわけでリコネクト機能の実装が決定!

    View full-size slide

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

    View full-size slide

  23. リコネクト(おまけ)
    苦労

    もともとサーバにデータが揃っていないところからスタート

    状態の補完機能もなかった

    リコネクトしないと機能を試せないのはえぐい
    デバッグツールを作成
    補完処理の実装と
    その後の開発をサポート

    View full-size slide

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

    View full-size slide

  25. まとめ

    思い通りに操作する気持ちよさを重要視

    コマンドの反応速度は必須

    重要なコマンドは最速で気持ちよく実行

    ラグによるズレを許容するための仕組みを紹介

    切断対策

    到達保証通信を出来るだけ使わないこと

    リコネクトは必須。超大事。

    View full-size slide