Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
いつでも快適に遊びたい!リンクスリングスのネットワーク遅延との付き合い方
Search
CyberAgent SGE Engineer
October 10, 2019
Technology
0
3.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.9k
サムザップにおけるNotionの 活用事例とPHPでのNotionAPIを利用した仕組み構築の紹介
sgeengineer
0
2.2k
Laravel OctaneをどうしてもPharで運用したい話
sgeengineer
2
2.8k
大規模Unityゲーム開発の設計事例 〜ドメイン駆動設計とDIコンテナを導入した一年を振り返る〜 / cedec2021-ddd
sgeengineer
2
15k
ロボットを動かすビジュアルプログラミングでできることはPHPでもできる!
sgeengineer
0
1.9k
PHP8版!Swooleのフレームワークを比べてみた
sgeengineer
1
3k
「戦国炎舞 -KIZNA-」で行ったAWSのコスト最適化の話
sgeengineer
0
2k
AirtestとPocoとOpenSTFによるUnity製スマートフォン向けゲームの実機自動テスト環境構築とその利用方法
sgeengineer
0
5.3k
PHPでgRPCって どこまでいけるの?
sgeengineer
0
5.1k
Other Decks in Technology
See All in Technology
命名から始めるSpec Driven
kuruwic
3
790
生成AIシステムとAIエージェントに関する性能や安全性の評価
shibuiwilliam
2
300
LangChain v1.0にトライ~ AIエージェントアプリの移行(v0.3 → v1.0) ~
happysamurai294
0
160
AI 時代のデータ戦略
na0
8
3.1k
AIにおける自由の追求
shujisado
2
440
ページの可視領域を算出する方法について整理する
yamatai1212
0
150
Docker, Infraestructuras seguras y Hardening
josejuansanchez
0
140
useEffectってなんで非推奨みたいなこと言われてるの?
maguroalternative
9
6.1k
小規模チームによる衛星管制システムの開発とスケーラビリティの実現
sankichi92
0
180
その設計、 本当に価値を生んでますか?
shimomura
2
140
インフラ屋さんはAIコーディングエージェントとどう生きるか/How infrastructure engineers interact with Kiro
ozawa
2
110
"なるべくスケジューリングしない" を実現する "PreferNoSchedule" taint
superbrothers
0
130
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
69k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
Faster Mobile Websites
deanohume
310
31k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
690
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
4 Signs Your Business is Dying
shpigford
186
22k
Music & Morning Musume
bryan
46
7k
Building Adaptive Systems
keathley
44
2.9k
We Have a Design System, Now What?
morganepeng
54
7.9k
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. 以降は通常の接続時と同じ通信を行う 現在絶賛バグチェック中! 近日のアップデートでリリースされる予定です!
リコネクト(おまけ) 苦労 • もともとサーバにデータが揃っていないところからスタート • 状態の補完機能もなかった • リコネクトしないと機能を試せないのはえぐい デバッグツールを作成 補完処理の実装と
その後の開発をサポート
リコネクト(おまけ) 後から考えるとものすごく大変 状態補完機能は強力な開発サポートツール リコネクトは最初から考慮に入れましょう
まとめ • 思い通りに操作する気持ちよさを重要視 ◦ コマンドの反応速度は必須 ◦ 重要なコマンドは最速で気持ちよく実行 ◦ ラグによるズレを許容するための仕組みを紹介 •
切断対策 ◦ 到達保証通信を出来るだけ使わないこと ◦ リコネクトは必須。超大事。