Photon Fusionセミナー 第4回
2024.06.20
Photon運営事務局

Copyright © 2024 GMO GlobalSign Holdings K.K.

Photon最新情報について
2024.06.20
Photon運営事務局

Copyright © 2024 GMO GlobalSign Holdings K.K.

萩原 ⻯⼆

Photon最新情報

3

本⽇のPhoton最新情報について
Fusion2.0正式リリースについてn メッセージ数ついての話
n Photon 100CCUフリープランについて
n 値上げのお知らせについて
n Photon Voiceの新機能のリリースについて
n Quantum3についてn

Copyright © 2024 GMO GlobalSign Holdings K.K.

4

Fusion2.0が正式リリース︕︕
nnn

先⽉にFusion2.0の正式リリースがありました(初のFusion2.0の安定版のリリースとなります)
Unity バージョンのサポート
Unity 6 を含む、2021.3.18 より新しいすべての Unity バージョンに対応しました。
いくつかの新しいUnityバージョンとの⾮互換性の原因となっていたバグを修正しました。
Fusion Statsツールを刷新し、表⽰される統計情報をより細かくコ
ントロールできるようになりました。

Copyright © 2024 GMO GlobalSign Holdings K.K.

5

Fusion2.0が正式リリース︕︕
nn

バグ修正として、Fusion 2の安定版リリースでは、クライアントSDKとサーバーインフラの両⽅において、多数のバグ修正と安定性の向上が⾏われました。
今後新しくFusionを利⽤される⽅においては、
Fusion1.xではなく、Fusion2.0系を利⽤されることをお勧め致します。
開発初期の場合はFusion1.xからのバージョンアップについても可能です。
詳細はマイグレーション⽤のドキュメントを参照してください。

Copyright © 2024 GMO GlobalSign Holdings K.K.

6

Fusion2.0が正式リリース︕︕
Fusion2.0の正式リリースに伴い、Fusionのサンプルもアップ
デートされております︕
n 200⼈対戦⽤のBR200もFusion2に対応しました︕
またFusion2.0⽤に改良もされております︕
n• レンダリング精度の⾼いラグ補償が⾏われます！
• 新しいインタレスト管理アドオンを使った⾼度なインタレスト管理を⾏っております！

Copyright © 2024 GMO GlobalSign Holdings K.K.

7

メッセージ数についての話
以前のPhoton Cloudでは、秒間あたり500msg/Roomというメッセージ数制限がありました。
n しかし、少し前からにはなりますが、メッセージ数について制限はございません︕︕
nとはいえ、メッセージ数を単純に増やすと、通信量が増えます
し、端末側の負荷も上がりますので、むやみやたらに増やすのは避けた⽅がよいです。
n もちろんその分の転送量も増えますので、場合によっては追加
料⾦が発⽣する可能性もありますので、お気をつけ下さい。
nCopyright © 2024 GMO GlobalSign Holdings K.K.

8

100CCU FreeプランについてnFusionとQuantumでは⼤⼈数でのマルチプレイが可能となっております。
※Fusion2では1Room200⼈以上、Quantum3では100⼈以上に対応しております。

nn

しかし、今までのFreeプランの20CCUでは20⼈までとなるた
め、開発するにあたり、有償プランを申し込む必要がありました。
そういった開発時の⼤⼈数テストなどにおいて利⽤できる
100CCUプランがリリースされております。

Copyright © 2024 GMO GlobalSign Holdings K.K.

9

100CCU Freeプランについてnnn

こちらのプランは無償で100CCU利⽤できるものですが、有償の100CCUプランと変わらずお使いいただけるものとなります。
この100CCU Freeプランは基本的には開発向けかつローンチ
⽤となります。
100CCUプランはCCUバーストの機能はありませんので、ロー
ンチ後にCCUが伸びそうな場合などは有償プランをご検討ください。
今までのRealtimeやPUNなどについては無償で利⽤できるのは
20CCUに変わりはございません。

Copyright © 2024 GMO GlobalSign Holdings K.K.

10

100CCU Freeプランについて
なお、100CCU Freeプランは1つのスタジオ/チームにつき、1つまでの利⽤となります。
複数お使いいただくことはできませんことを予めご了承ください。
n 1つしか使えませんが、有償にアップグレードすることによって再度新しく100CCU Freeプランを利⽤することが可能です。
nn

こちらについて利⽤出来る範囲などについて不明な点がございましたら、Photon運営事務局までお問い合わせいただきますようお願いいたします。

Copyright © 2024 GMO GlobalSign Holdings K.K.

11

Photonの値上げについて
先⽇、メールやHP上などで値上げについて告知をさせていただ
きました。
2024年8⽉より適⽤となります。
n 対象となるサービスは以下の通りです。
n• Photon Realtime• Photon Fusion• Photon Voice• Photon Chat
• Photon PUN• Photon Bolt
• Photon Server

Copyright © 2024 GMO GlobalSign Holdings K.K.

12

Photonの値上げについてnn

なお、今回の値上げにおいて各種CircleのMembership(Gaming、Industries)については対象外となります。
今回の値上げについて、ご不明な点などございましたら、
Photon運営事務局までお問い合わせください。

Copyright © 2024 GMO GlobalSign Holdings K.K.

13

Photon Voiceに新機能︕
n

ExitGames社とModulate社が戦略的パートナーシップを締結
し、Photon VoiceにてModulate社のToxModが利⽤できる予定です︕︕

Copyright © 2024 GMO GlobalSign Holdings K.K.

14

Photon Voiceに新機能︕
ToxModとは、AIを利⽤したボイスチャットモデレーション機
能を提供しているサービスとなります。
n 例えばいわゆる”Fワード“であったり、暴⾔、ヘイトスピーチなどを検知します。
n ただし、単純に検知するのでは無く、仲間内のノリなのか、それとも悪意があるのかを前後の⽂脈などで判断し、問題⾏為があったかどうかを検知する優れたソリューションです。
n Photon Voiceではないですが、CoD MW3などにも採⽤されている実績のあるソリューションです。
n

Copyright © 2024 GMO GlobalSign Holdings K.K.

15

Photon Voiceに新機能︕
nnn

実際の利⽤に当たっては、ダッシュボード上から利⽤開始することが可能になる予定です。
Photon Voiceにおいては、サーバー側がToxModへの処理を⾏うため、クライアント側で何かする必要はなく、処理⽤にソースコードを修正する必要はありません。
その他の詳細についてはわかり次第 Xやサポートページ等にて公開をする予定です。

Copyright © 2024 GMO GlobalSign Holdings K.K.

16

Quantum3について
Photon Quantum3がリリースされます︕
n Quantum3の特徴としてはベースとしてPhoton Realtime
ver5系の利点などを活かしつつ、サーバ側のイベント⽤のWebhookや、NavMeshのベイク、3Dカプセルの衝突などがアップデートされております。
n また、コードをより理解しやすくするためのCodeDocへの対応なども⾏われます。
n これらによって、さらなるネットワーク効率の最適化や、ダイ
ナミックなプレイヤー管理、ゲームプレイのレスポンスより素早くする予測の機能が追加される予定です。
n

Copyright © 2024 GMO GlobalSign Holdings K.K.

17

Quantum3について昨⽇(6/19)、Quantum3のRC版がリリースされました︕
Preview版にはCircle加⼊が必須でしたが、こちらはどなたでもお試しいただくことは可能です︕
n Quantum3を利⽤するに当たって注意点がございます。
古いQuantumのAppIDは利⽤できないため、新規でQuantum3⽤にAppIDを作成する必要があります。
(メニューが別れています)nCopyright © 2024 GMO GlobalSign Holdings K.K.

18

Photon Fusion 神話バスターズ〜PUN2ユーザー向けFusion 2⼊⾨〜
2024.6.20
Photon運営事務局

Copyright © 2024 GMO GlobalSign Holdings K.K.

⾼橋 陽介

⽬次
n

Photon製品 2024nPhoton製品の選び⽅ 2024nPhoton Fusion 神話バスターズ〜 PUN2ユーザー向けFusion 2⼊⾨ 〜

Copyright © 2024 GMO GlobalSign Holdings K.K.

20

Photon製品 2024

21

Photon製品の変遷
PUN

Bolt

(Quantum)
Quantum※⽇本の利⽤者は少なめ※別途契約が必要

FusionFusion※先⽉Fusion 2が正式リリース︕

Copyright © 2024 GMO GlobalSign Holdings K.K.

Quantum
Quantum※昨⽇Quantum 3 RCが公開︕

22

Photon Fusionとは︖
nn「PUN」「Bolt」を融合させたネットワークエンジン
様々なネットワークトポロジー（接続形態）に対応するため、動作が⼤きく異なる2つのモードを備えている• ホストモード（Host Mode）• 共有モード（Shared Mode）

Copyright © 2024 GMO GlobalSign Holdings K.K.

23

Photon Fusion（ホストモード）n

サーバー主導（Server Authoritative）• サーバーがすべての権限を独占的に持つ「集中型」• ネットワーク上で同期するデータはすべてサーバーが管理する

n

クライアントサイド予測・ロールバック・ラグ補償などの⾼度な機能によって、ネットワーク上の遅延を隠蔽できる

Copyright © 2024 GMO GlobalSign Holdings K.K.

24

Photon Fusion（共有モード）n

クライアント主導（Client Authoritative）• 各クライアントがそれぞれ権限を持つ「分散型」• ネットワーク上で同期するデータは各クライアントが管理するn

データ圧縮・関⼼領域（AOI︓Area Of Interest）などの機能によって、⼤⼈数のプレイヤーが参加するゲームにも対応する
PUNを扱いやすくして、⾼速・⾼機能にしたもの

Copyright © 2024 GMO GlobalSign Holdings K.K.

25

Photon Quantumとは︖
n

マルチプレイヤーゲーム開発⽤のゲームエンジン• 正確に⾔えば、ネットワークエンジンではない︕

n

完全に決定論的なシミュレーションの実⾏n

⼊⼒のみを同期することによる通信量削減・チート耐性n

⾼速な独⾃のECS（Entity Component System）で動作

n

予測・ロールバックによる、ネットワーク上の遅延の隠蔽

Copyright © 2024 GMO GlobalSign Holdings K.K.

26

Photon製品の変遷
PUN

Bolt

(Quantum)

FusionFusionQuantum（共有モード）Copyright © 2024 GMO GlobalSign Holdings K.K.

（ホストモード）27

Photon製品の選び⽅ 202428

オンラインゲーム開発初⼼者ならn「Fusion（共有モード）」から始めてみるのがオススメ

n

もちろん製品ごとに得意・不得意なジャンルはあるnn

よほど厳しい要件（eスポーツレベルの低遅延・⼤⼈数のメタ
バース空間など）でなければ、「この製品でなければ作れない」「この製品では作れない」ものはない
2〜8⼈程度で遊べるゲームから制作してみると良いかも

Copyright © 2024 GMO GlobalSign Holdings K.K.

29

学習の要点 (1/2)
nFusion（ホストモード）• サーバー主導の（サーバーがすべての権限を持つ）設計が必要• 予測・ロールバック・ラグ補償など⾼度な機能の理解が必要• PUN2とは動作が異なることに注意nFusion（共有モード）• PUN2とほぼ同じように使うことができる• オンラインゲーム開発⼊⾨にも最適• ほとんどの⾼度な機能は利⽤できない（覚えなくて良い）

Copyright © 2024 GMO GlobalSign Holdings K.K.

30

学習の要点 (2/2)
nQuantum• Fusion（状態転送）とはアプローチがまったく異なる• 開発者の予備スキルによって学習コストが変わる
•
•
•
•
•

コンピューターの数値表現（固定⼩数点数・浮動⼩数点数）
プログラミング技術（C#のunsafeコード・ポインタ）
ソフトウェア設計（ModelとViewの分離、疎結合）
データ指向アーキテクチャ（ECS︓Entity Component System）
オンラインマルチプレイヤーゲーム技術（予測・ロールバック）

Copyright © 2024 GMO GlobalSign Holdings K.K.

31

ラグの影響が少ないゲームならn「Fusion（共有モード）」で⼗分な性能が出せるn

カジュアルな協⼒・対戦ゲーム

n

ターンベースのゲームn

⾮ゲーム⽤途（メタバースなど）にも適している

Copyright © 2024 GMO GlobalSign Holdings K.K.

32

本格的なゲーム⽤途ならn「Quantum」がイチオシ︕

n

⾮常に⾼性能（低遅延・低帯域幅）n

ローカルマルチプレイヤーゲーム
感覚でゲームロジックを実装できる
ため、実装⼯数削減も期待できる（ネットコード不要）

Copyright © 2024 GMO GlobalSign Holdings K.K.

33

Quantumの強み・弱み
n各クライアントが決定論的なシミュレーションを実⾏する• ⼊⼒のみを同期するため、通信量が⼤きく削減される• ゲーム中に存在するすべての要素の状態を計算する必要があるため、⼤規模なワールドのバトルロイヤルやメタバース等は厳しいかも• 状態を同期しないため、メモリを改ざんするチートに強い• すべての状態を計算する必要があるため、カードゲームの相⼿の⼿札を盗み⾒たり、FPSのウォールハック等のチートに弱い

Quantumの弱みが問題になるならサーバーが必要になる
Copyright © 2024 GMO GlobalSign Holdings K.K.

34

サーバーが必要なゲームならn「Fusion（ホストモード）」が最適

n

専⽤サーバーを⽴ち上げる（サーバーモード）• サーバー上でUnityのヘッドレスビルドを実⾏する• 専⽤サーバーを運⽤するための追加費⽤が発⽣する

nプレイヤーの1⼈がホスト（サーバー兼クライアント）になる• 専⽤サーバーを運⽤する費⽤はかからない• ゲームの安定性や信頼性はホストに⼤きく依存する（低性能な端末や不安定な回線の問題・ホストのチートは防げない）

Copyright © 2024 GMO GlobalSign Holdings K.K.

35

ゲームジャンルから選ぶなら

Copyright © 2024 GMO GlobalSign Holdings K.K.

36

しかし・・・

FusionもQuantumも難しいと考えられている︖（未だにPUN2の利⽤者も多い・・・）

Copyright © 2024 GMO GlobalSign Holdings K.K.

37

Photon Fusion 神話バスターズ〜PUN2ユーザー向けFusion 2⼊⾨〜

38

神話︓FusionはPUNより難しい
n

インターネット上の情報はFusionの⽅が圧倒的に少ない

n

ホストモードで使⽤できる⾼度な機能は確かに難易度は⾼い

nとはいえ、PUNより簡単で使いやすく柔軟性があり⾼速に動作するようになったものが、Fusion（共有モード）
Fusion（共有モード）は思ったより難しくない︕ということをPUNの機能と⽐較しながら紹介していきたい

Copyright © 2024 GMO GlobalSign Holdings K.K.

39

PUNと⽐較する内容n

⽐較1︓ネットワーク管理クラスn

⽐較2︓ネットワークオブジェクトn

⽐較3︓組み込みコンポーネントn

⽐較4︓独⾃のスクリプト実装

n⽐較5︓状態の同期⽅法

n

⽐較6︓時間の同期

Copyright © 2024 GMO GlobalSign Holdings K.K.

40

⽐較1︓ネットワーク管理クラス
n

ネットワークに関連する処理の実⾏や管理を⾏うクラス• ネットワークへの接続・プレイヤー同⼠のマッチメイキング• ネットワークオブジェクトの⽣成・状態の同期など

PUN• 静的クラスのPhotonNetwork

Copyright © 2024 GMO GlobalSign Holdings K.K.

Fusion•NetworkRunnerコンポーネント（ゲームオブジェクトのインスタンス）41

ルームへの参加（PUN）
using Photon.Pun;
using Photon.Realtime;using UnityEngine;
public class GameLauncher : MonoBehaviourPunCallbacks{
private void Start() {// マスターサーバーへ接続する
PhotonNetwork.ConnectUsingSettings();}
public override void OnConnectedToMaster() {// マスターサーバーへの接続に成功したら、ルームの作成/参加を⾏う
PhotonNetwork.JoinOrCreateRoom("Room", new RoomOptions(), TypedLobby.Default);}
public override void OnJoinedRoom() {// ルームへの参加に成功したかを確認する
Debug.Log("成功");}}

Copyright © 2024 GMO GlobalSign Holdings K.K.

42

セッションへの参加（Fusion）
using Fusion;using UnityEngine;
public class GameLauncher : MonoBehaviour{[SerializeField]
private NetworkRunner networkRunnerPrefab;
private async void Start() {// NetworkRunnerのインスタンスを⽣成する
var runner = Instantiate(networkRunnerPrefab);// 引数に渡した設定を使⽤して、セッションへ参加する
var result = await runner.StartGame(new StartGameArgs {GameMode = GameMode.Shared});// セッションへの参加に成功したかを確認する
if (result.Ok) {Debug.Log("成功");}}}

Copyright © 2024 GMO GlobalSign Holdings K.K.

43

⽐較2︓ネットワークオブジェクトn

ネットワークを介して複製されるゲームオブジェクトnFusionはプレハブが⾃動的にベイク（テーブルに登録）される
PUN• PhotonViewコンポーネント• Resourcesフォルダにプレハブを作成する必要がある（デフォルト）

Copyright © 2024 GMO GlobalSign Holdings K.K.

Fusion••NetworkObjectコンポーネント
プレハブは⾃動的にベイクされるため
Resourcesフォルダは不要

44インスタンス化（PUN）
PhotonNetwork.Instantiate("NetworkObject",
Vector3.zero,
Quaternion.identity);

Copyright © 2024 GMO GlobalSign Holdings K.K.

45

スポーン（Fusion）
runner.Spawn(
avatarPrefab,
Vector3.zero,
Quaternion.identity);

Copyright © 2024 GMO GlobalSign Holdings K.K.

46

⽐較3︓組み込みコンポーネントn位置やアニメーション等を同期するためのコンポーネントnFusionはNetworkCharacterControllerも⽤意されている
PUN

•
•
•
•

PhotonTransformView
PhotonRigidbodyView
PhotonRigidbody2DView
PhotonAnimatorView

Copyright © 2024 GMO GlobalSign Holdings K.K.

Fusion•••••NetworkTransform
NetworkRigidbody3D（アドオン）
NetworkRigidbody2D（アドオン）
NetworkMecanimAnimator
NetworkCharacterController
47⽐較4︓独⾃のスクリプト実装
n

ネットワークオブジェクトに振る舞いを追加するスクリプト（ゲームオブジェクトのMonoBehaviourに対応するもの）

PUN• MonoBehaviourPunCallbacksを継承する• ネットワークオブジェクトの所有者でのみ処理を実⾏したい場合にはphotonView.IsMineで分岐が必要

Copyright © 2024 GMO GlobalSign Holdings K.K.

Fusion••NetworkBehaviourを継承する
ネットワークオブジェクトの権限者でのみFixedUpdateNetworkが実⾏されるため、分岐は不要（デフォルト）48

位置の同期（PUN）
using Photon.Pun;
using UnityEngine;
public class PlayerAvatar : MonoBehaviourPunCallbacks{
private void Update() {if (photonView.IsMine) {var h = Input.GetAxis("Horizontal");var v = Input.GetAxis("Vertical");var input = new Vector3(h, 0f, v).normalized;
transform.Translate(5f * Time.deltaTime * input);}}}

Copyright © 2024 GMO GlobalSign Holdings K.K.

49

位置の同期（Fusion）
using Fusion;using UnityEngine;
public class PlayerAvatar : NetworkBehaviour{
public override void FixedUpdateNetwork() {// Fusion 2のFixedUpdateNetworkでは、条件分岐不要// if (!Object.HasStateAuthority) { return; }var h = Input.GetAxis("Horizontal");var v = Input.GetAxis("Vertical");var input = new Vector3(h, 0f, v).normalized;
transform.Translate(5f * Runner.DeltaTime * input);}}

Copyright © 2024 GMO GlobalSign Holdings K.K.

50

⽐較5︓状態の同期⽅法
PUN

Fusion

オブジェクト同期（PhotonSerializeView）

ネットワークプロパティ

RPC

RPC

カスタムプロパティ

ネットワークプロパティ

Copyright © 2024 GMO GlobalSign Holdings K.K.

51

ネットワークプロパティnnC#の通常の変数（フィールド/プロパティ）のように使えて、値を更新すると⾃動的に同期が⾏われる
PUNの「オブジェクト同期（PhotonSerializeView）」と「カスタムプロパティ」の両⽅の機能を備え、変更イベントの検知も可能で、柔軟で使いやすく、より正確で⾼速に動作するようにしたもの[Networked]
public int Score { get; set; }Copyright © 2024 GMO GlobalSign Holdings K.K.

52

変更検知（Change Detection）n

簡単に使⽤できるOnChangedRender属性[Networked, OnChangedRender(nameof(OnLifeChanged))]public int Life { get; set; }private void OnLifeChanged() {Debug.Log($"ライフが{Life}になりました");}n

柔軟性が⾼く実践的に使⽤できるChangeDetector

private ChangeDetector changeDetector;
public override void Spawned() {changeDetector = GetChangeDetector(ChangeDetector.Source.SimulationState);}public override void Render() {foreach (string changed in changeDetector.DetectChanges(this, out var previous, out var current)) {switch (changed) {case nameof(Life):
var reader = GetPropertyReader<int>(changed);(int from, int to) = reader.Read(previous, current);
Debug.Log($"ライフが{from}から{to}になりました");
break;}}}

Copyright © 2024 GMO GlobalSign Holdings K.K.

53

⽐較5︓状態の同期⽅法（機能観点）
PUN

Fusion

オブジェクト同期（PhotonSerializeView）

ネットワークプロパティ

RPC

RPC

カスタムプロパティ

ネットワークプロパティ

Copyright © 2024 GMO GlobalSign Holdings K.K.

54

⽐較5︓状態の同期⽅法（⽤途観点）
PUN

Fusion

オブジェクト同期（PhotonSerializeView）

ネットワークプロパティ

RPC

ネットワークプロパティ または RPC

カスタムプロパティ

ネットワークプロパティ

Copyright © 2024 GMO GlobalSign Holdings K.K.

55

RPC（リモートプロシージャコール）nn

PUNでは、汎⽤的に使⽤できる同期⽅法だったが…
Fusionでは、RPC⾃体も⾮常に使いやすくなっているものの、他の同期⽅法の補助での使⽤が推奨されている[Rpc(RpcSources.All, RpcTargets.All)]
public void RPC_SendMessage(string message) {Debug.Log(message);}

Copyright © 2024 GMO GlobalSign Holdings K.K.

56

FusionでRPCが有効なケースn

ネットワークプロパティを使う必要がないもの• ゲームロジックに影響を与えない・状態を持たない⼀時的イベント（例︓エモートやチャットメッセージなど）

n

ネットワークプロパティを間接的に更新するもの• ⾃分が権限を持たないネットワークオブジェクトの更新（例︓⾃分の攻撃で、他プレイヤーにダメージを与えるなど）

nプレイヤー⼊⼒を補助するもの（ホストモードのみ）• ⼊⼒構造体に含めたくない⼊⼒（例︓プレイヤー名の送信など）

Copyright © 2024 GMO GlobalSign Holdings K.K.

57

RPCについて補⾜（語弊のないように）n

⾼性能・⾼機能で便利なネットワークプロパティを中⼼に使⽤して状態を同期するのが、Fusionのベストプラクティス

n「FusionでRPCを使うべきではない」という話ではない

n

RPCの性能が低い・動作が重いということでもない

n

RPCが有効なケースを、無理やりネットワークプロパティに置き換えても、特に最適化されるわけではない

Copyright © 2024 GMO GlobalSign Holdings K.K.

58

⽐較6︓時間の同期nn

ローカル時刻ではない、適切な基準の時間単位を使⽤する
Fusion 2の共有モードでは、クライアント間のティックが正確
になった
PUN

• サーバー時刻（PhotonNetwork.ServerTimestamp）

Copyright © 2024 GMO GlobalSign Holdings K.K.

Fusion•ティック（NetworkRunner.Tick）

59

残り時間タイマーの実装例

Copyright © 2024 GMO GlobalSign Holdings K.K.

60

サーバー時刻（PUN）
using Photon.Pun;
using TMPro;using UnityEngine;
public class GameTimer : MonoBehaviourPunCallbacks{[SerializeField]
private TextMeshProUGUI timeLabel;public override void OnJoinedRoom() {// マスタークライアントが、タイマー開始時刻（ルームのカスタムプロパティ）を設定する
if (PhotonNetwork.IsMasterClient) {PhotonNetwork.CurrentRoom.SetCustomProperties(new ExitGames.Client.Photon.Hashtable {["Timer"] = PhotonNetwork.ServerTimestamp});}}
public void Update() {if (!PhotonNetwork.InRoom) { return; }if (PhotonNetwork.CurrentRoom.CustomProperties["Timer"] is not int timestamp) { return; }// タイマー開始時刻と現在のサーバー時刻から、残り時間を計算する
float remainingTime = 60f - Mathf.Max(0f, unchecked(PhotonNetwork.ServerTimestamp - timestamp) / 1000f);// 残り時間の表⽰を更新する
timeLabel.SetText("{0:2}", remainingTime);}}

Copyright © 2024 GMO GlobalSign Holdings K.K.

61

ティック（Fusion）
using Fusion;using TMPro;using UnityEngine;
public class GameTimer : NetworkBehaviour{[SerializeField]
private TextMeshProUGUI timeLabel;[Networked]
private TickTimer Timer { get; set; }public override void Spawned() {// マスタークライアントが、残り時間のタイマー（ネットワークプロパティ）を60秒に設定する
if (Runner.IsSharedModeMasterClient) {Timer = TickTimer.CreateFromSeconds(Runner, 60f);}}
public override void Render() {// 残り時間の表⽰を更新する
timeLabel.SetText("{0:2}", Timer.RemainingTime(Runner) ?? 0f);}}

Copyright © 2024 GMO GlobalSign Holdings K.K.

62

詳細は公式ドキュメントにてn

チュートリアルやマニュアルは翻訳済みです︕

n

専⾨⽤語多めですが、結構読みやすくなっているはず︕

Copyright © 2024 GMO GlobalSign Holdings K.K.

63

Fusion 2⼊⾨書執筆中（公開⽇未定）nn

PUN2⼊⾨書はありがたいことに多くの開発者の⽅から参考にしていただいています︕
内容をFusion 2にアップデートした本を無料で公開する予定

Copyright © 2024 GMO GlobalSign Holdings K.K.

64

これからはQuantumも熱い︕
n

ほぼラグ無しで100⼈の同期も余裕で動作します︕

n

100⼈参加時の1クライアント当たりの通信量は約20KB/秒

Copyright © 2024 GMO GlobalSign Holdings K.K.

65

ご清聴ありがとうございました

Copyright © 2024 GMO GlobalSign Holdings K.K.