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
3.2k
いつでも快適に遊びたい!リンクスリングスのネットワーク遅延との付き合い方
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.8k
サムザップにおけるNotionの 活用事例とPHPでのNotionAPIを利用した仕組み構築の紹介
sgeengineer
0
2.1k
Laravel OctaneをどうしてもPharで運用したい話
sgeengineer
2
2.6k
大規模Unityゲーム開発の設計事例 〜ドメイン駆動設計とDIコンテナを導入した一年を振り返る〜 / cedec2021-ddd
sgeengineer
2
15k
ロボットを動かすビジュアルプログラミングでできることはPHPでもできる!
sgeengineer
0
1.8k
PHP8版!Swooleのフレームワークを比べてみた
sgeengineer
1
2.8k
「戦国炎舞 -KIZNA-」で行ったAWSのコスト最適化の話
sgeengineer
0
1.9k
AirtestとPocoとOpenSTFによるUnity製スマートフォン向けゲームの実機自動テスト環境構築とその利用方法
sgeengineer
0
5.2k
PHPでgRPCって どこまでいけるの?
sgeengineer
0
5k
Other Decks in Technology
See All in Technology
AI エージェントとはそもそも何か? - 技術背景から Amazon Bedrock AgentCore での実装まで- / AI Agent Unicorn Day 2025
hariby
1
210
「魔法少女まどか☆マギカ Magia Exedra」の必殺技演出を徹底解剖! -キャラクターの魅力を最大限にファンに届けるためのこだわり-
gree_tech
PRO
0
410
制約理論(ToC)入門
recruitengineers
PRO
8
3.6k
役割は変わっても、変わらないもの 〜スクラムマスターからEMへの転身で学んだ信頼構築の本質〜 / How to build trust
shinop
0
150
Goss: Faiss向けの新しい本番環境対応 Goバインディング #coefl_go_jp
bengo4com
1
1.4k
退屈なことはDevinにやらせよう〜〜Devin APIを使ったVisual Regression Testの自動追加〜
kawamataryo
4
980
実践アプリケーション設計 ②トランザクションスクリプトへの対応
recruitengineers
PRO
4
1.2k
ヘブンバーンズレッドにおける、世界観を活かしたミニゲーム企画の作り方
gree_tech
PRO
0
410
進捗
ydah
2
220
ここ一年のCCoEとしてのAWSコスト最適化を振り返る / CCoE AWS Cost Optimization devio2025
masahirokawahara
1
930
ライブサービスゲームQAのパフォーマンス検証による品質改善の取り組み
gree_tech
PRO
0
410
コスト削減の基本の「キ」~ コスト消費3大リソースへの対策 ~
smt7174
2
310
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
51
5.6k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.5k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
790
The World Runs on Bad Software
bkeepers
PRO
70
11k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.6k
Speed Design
sergeychernyshev
32
1.1k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
How to train your dragon (web standard)
notwaldorf
96
6.2k
Automating Front-end Workflow
addyosmani
1370
200k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
The Cult of Friendly URLs
andyhume
79
6.6k
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. 以降は通常の接続時と同じ通信を行う 現在絶賛バグチェック中! 近日のアップデートでリリースされる予定です!
リコネクト(おまけ) 苦労 • もともとサーバにデータが揃っていないところからスタート • 状態の補完機能もなかった • リコネクトしないと機能を試せないのはえぐい デバッグツールを作成 補完処理の実装と
その後の開発をサポート
リコネクト(おまけ) 後から考えるとものすごく大変 状態補完機能は強力な開発サポートツール リコネクトは最初から考慮に入れましょう
まとめ • 思い通りに操作する気持ちよさを重要視 ◦ コマンドの反応速度は必須 ◦ 重要なコマンドは最速で気持ちよく実行 ◦ ラグによるズレを許容するための仕組みを紹介 •
切断対策 ◦ 到達保証通信を出来るだけ使わないこと ◦ リコネクトは必須。超大事。