Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
いつでも快適に遊びたい!リンクスリングスのネットワーク遅延との付き合い方
Search
CyberAgent SGE Engineer
October 10, 2019
Technology
0
3k
いつでも快適に遊びたい!リンクスリングスのネットワーク遅延との付き合い方
Sumzap TECH NIGHT vol.7 の発表資料です。
CyberAgent SGE Engineer
October 10, 2019
Tweet
Share
More Decks by CyberAgent SGE Engineer
See All by CyberAgent SGE Engineer
SREチームの立ち上げから5年間とこれから
sgeengineer
0
1.6k
サムザップにおけるNotionの 活用事例とPHPでのNotionAPIを利用した仕組み構築の紹介
sgeengineer
0
1.8k
Laravel OctaneをどうしてもPharで運用したい話
sgeengineer
2
2.3k
大規模Unityゲーム開発の設計事例 〜ドメイン駆動設計とDIコンテナを導入した一年を振り返る〜 / cedec2021-ddd
sgeengineer
2
13k
ロボットを動かすビジュアルプログラミングでできることはPHPでもできる!
sgeengineer
0
1.5k
PHP8版!Swooleのフレームワークを比べてみた
sgeengineer
1
2.5k
「戦国炎舞 -KIZNA-」で行ったAWSのコスト最適化の話
sgeengineer
0
1.7k
AirtestとPocoとOpenSTFによるUnity製スマートフォン向けゲームの実機自動テスト環境構築とその利用方法
sgeengineer
0
4.9k
PHPでgRPCって どこまでいけるの?
sgeengineer
0
4.7k
Other Decks in Technology
See All in Technology
AWSアカウントのセキュリティ自動化、どこまで進める? 最適な設計と実践ポイント
yuobayashi
7
850
Introduction to OpenSearch Project - Search Engineering Tech Talk 2025 Winter
tkykenmt
2
140
AWSではじめる Web APIテスト実践ガイド / A practical guide to testing Web APIs on AWS
yokawasa
8
750
Cracking the Coding Interview 6th Edition
gdplabs
14
28k
LINEギフトにおけるバックエンド開発
lycorptech_jp
PRO
0
370
サイト信頼性エンジニアリングとAmazon Web Services / SRE and AWS
ymotongpoo
7
1.7k
日経のデータベース事業とElasticsearch
hinatades
PRO
0
260
DeepSeekとは?何がいいの? - Databricksと学ぶDeepSeek! 〜これからのLLMに備えよ!〜
taka_aki
1
160
Amazon Q Developerの無料利用枠を使い倒してHello worldを表示させよう!
nrinetcom
PRO
2
120
リクルートのエンジニア組織を下支えする 新卒の育成の仕組み
recruitengineers
PRO
1
130
1行のコードから社会課題の解決へ: EMの探究、事業・技術・組織を紡ぐ実践知 / EM Conf 2025
9ma3r
12
4.3k
【詳説】コンテンツ配信 システムの複数機能 基盤への拡張
hatena
0
280
Featured
See All Featured
Facilitating Awesome Meetings
lara
52
6.2k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
570
Git: the NoSQL Database
bkeepers
PRO
427
65k
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
Code Review Best Practice
trishagee
67
18k
Raft: Consensus for Rubyists
vanstee
137
6.8k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
1k
How GitHub (no longer) Works
holman
314
140k
Typedesign – Prime Four
hannesfritz
40
2.5k
Measuring & Analyzing Core Web Vitals
bluesmoon
6
260
The Language of Interfaces
destraynor
156
24k
Transcript
ゲーム業界の通信の未来を語る 2019/10/10 STN vol.7 ~次世代のゲーム体験はどう変わるのか~
01 はじめに サムザップテックナイトとは 実務で活かせるライブ感ある情報の発信と ゲーム業界に関わる人と人との交流を通じ、 ゲーム業界全体の発展を目指す場。
いつでも快適に遊びたい! リンクスリングスの ネットワーク遅延との付き合い方 株式会社サムザップ 二宮 章太 03 サムザップ 登壇
自己紹介 二宮章太 • 2015年入社 • リンクスリングスのバトル部分を担当 • PhotonServer/Unity
リンクスリングス
リンクスリングス
遅延対策
大事にしていること 自分の思い通りに 操作する気持ちよさ 反応速度を重視 • すぐに最高速度で移動する • すぐに振り向く • すぐに攻撃が出る
速度重視のコマンドを 最速で放つ • 入力を受けたらすぐに 移動・回転・スキルを発動する ◦ サーバは経由させずに即実行! • 遅延によるズレは 致命傷にならないように工夫
遅延によるマイナスを減らす 「避けたはずなのにダメージを受けた」をなくす • 当たってないのに被ダメ判定は理不尽 • ダメージを受ける側で当たり判定を行う
攻撃がスカる? コリジョンを工夫する • 実際の攻撃エフェクトの 見た目よりも当たり判定を広く取る ◦ 誤判定と思われない程度の広さ ◦ キャラ0.5~1人分程度大きくする (拡張幅はゲームスピードに依存)
◦ 敵に向かって突進する速度や角度を うまく調整し、ヒットタイミングを 誤認させる
ヒット演出 ダメージテキスト • ヒット判定をもらってから表示 ◦ 反応速度 < 判定の正しさ ◦ 人間の反応速度を
計算に入れておく (ヒットの認識 →ダメージ表示の確認)
ヒット演出 ヒットしたら爆発する球 • ローカルで処理 ◦ 通過してから爆発は許容できない ◦ 判定の正しさ < 気持ちよさ
• 稀に出る副作用 ◦ 仲間の近くを弾丸が通過!球の爆発はしてないが、 吹き飛ぶ仲間。あいつ、、、何にやられたん だ、、、、!! ◦ 敵を射撃!球が爆発!やったぜ!!ノーダメージで 走りこんでくる敵!ぎゃああああああ
ヒット演出 例)スキル使用後、敵に向かって突撃し、 接敵したらストップ&攻撃するスキル • ヒット判定をもらってから ストップ&攻撃の処理をするとダメ ◦ ローカルで処理をすると、 攻撃が届かない、ラグで当たらない •
多少通過するのはコリジョンを工夫 ◦ 攻撃演出のあるエフェクト上以外も キャラ周辺にもコリジョンを設置 ◦ キャラ周辺のコリジョンは ◦ 後ろ方向に広めに取る
ラグの上限を設定 RTTに閾値を設けて、通信環境が回復するまで動けなくする • 当初はRTT 250程度 • 電車でプレイするとどこかしらで動けなくなった • 現在はRTT 350程度まで許容
• 瞬間移動するユーザが報告されたりする
切断対策
切断しやすいゲームとは? ネットワークは同じなのに、 アプリによって切断しやすいしづらいが存在する。 • RUDPの仕組みに着目 • PhotonのRUDP ◦ 到達保証 ▪
必ず届く ◦ 順序保証 ▪ 送信した順にアプリケーションに届く
切断しやすいゲームとは? 到達保証?必ず届く?? • UDPは通信ロストがありうる • Photonの実装 ◦ Ackで到着確認 ◦ 再送機能
◦ ダメなら切断 到達保証を多用すると通信の瞬断に対してシビアになる
到達保証通信を減らす 通信頻度を考える 1. 移動 2. 陣取り 3. スキルなどその他 • 移動
◦ ロスト許容 途中抜けても最新が合えばOK • 陣取り ◦ 端末間で陣の状態がずれるのは困る ◦ サーバへの送信はロストしても構わない
山手線チェック チームメンバーで山手線に乗り込み移動しながらプレイ 通信が切れてしまうような場所を除けば 切断されずにプレイ可能なことを確認! いける、、、!!!
甘かった • 陣取りは数フレームおきに発生 ◦ 絶えず到達保証の通信が発生 • 短い瞬断であっても確実に切断してくる • 山手線の回線は実は良かったようだ、、 •
もはや切断は仕方ない • 再接続だ というわけでリコネクト機能の実装が決定!
リコネクト サーバ側でゲームの状態を保持しておく 1. 再接続を検知 2. サーバから最新のゲーム状態を配布 3. 以降は通常の接続時と同じ通信を行う 現在絶賛バグチェック中! 近日のアップデートでリリースされる予定です!
リコネクト(おまけ) 苦労 • もともとサーバにデータが揃っていないところからスタート • 状態の補完機能もなかった • リコネクトしないと機能を試せないのはえぐい デバッグツールを作成 補完処理の実装と
その後の開発をサポート
リコネクト(おまけ) 後から考えるとものすごく大変 状態補完機能は強力な開発サポートツール リコネクトは最初から考慮に入れましょう
まとめ • 思い通りに操作する気持ちよさを重要視 ◦ コマンドの反応速度は必須 ◦ 重要なコマンドは最速で気持ちよく実行 ◦ ラグによるズレを許容するための仕組みを紹介 •
切断対策 ◦ 到達保証通信を出来るだけ使わないこと ◦ リコネクトは必須。超大事。