112 Views
February 21, 26
スライド概要
2026/02/20に開催された「Unity 6.3 完全に理解した 勉強会」で登壇した資料です。
渋谷で働くGame Programmer (Unity) at CyberAgent, Inc. | Unity Weekly: http://bit.ly/3i6fRPe | Blog: http://bit.ly/3iheiOE | 最近ポケカはじめました
Platform Toolkit 入門 Unity 6.3 完全に理解した 勉強会 2026/02/20 @yucchiy_ / Yuichiro Mukai
このLTで話したいこと • Platform Toolkitの概要についての紹介 • どういうパッケージなのか • 何ができるのか • Platform Toolkitの使い方についての紹介 • マルチプラットフォーム抽象化とキャパ リティ ビ • アカウント・アチーブメント・セーブシステムの使い方
自己紹介 向井 祐一郎 • 株式会社 サイバーエージェント / 株式会社アプリ ット • 技術統括本部 / Lead Developer Experience • システム系の基盤開発・プロジェクトの開発支援 SNS・個人活動 など • @yucchiy_(X) • Unity Weekly • https://blog.yucchiy.com/project/unity-weekly/page ボ • UniTips(社内有志で技術書典に執筆)
プラットフォーム機能について
Platform Toolkitが扱うプラットフォーム機能 • プラットフォームごとの ーム固有の機能 • アカウント: プラットフォームアカウント情報の取得 • アチーブメント: ームの達成進捗の更新 ゲ ゲ • セーブシステム: アカウントに紐づくセーブ
プラットフォーム機能に対応するメリット • ストア露出やフィーチャー枠 など を介して、ユー ー獲得の機会が増える fi ザ https://play.google.com/intl/ja_ALL/console/about/levelup/#program-bene ts
Platform Toolkitについて
Platform Toolkitとは • 複数のプラットフォーム機能を、統一的なAPIで扱えるUnity公式パッケージ • クロスプラットフォームAPIにより、複数プラットフォーム対応のコストを削減できる • モバイル・コンソールの主要なプラットフォームをサ ート • 全ての機能をエ ィター上でテスト可能 ポ デ https://www.youtube.com/watch?v=kvAfczwPVtc
クロスプラットフォームAPI プラットフォーム機能を、統一的なAPIによって操作できる プラットフォーム(iOS・Android・Switchなど)に関する記述は一切存在しない // プライマリアカウントログインして、そのユーザー情報を取得 var primaryAccount = await PlatformToolkit.Accounts.Primary.Establish(); Debug.Log($"Name: {primaryAccount.GetName()}");
プラットフォームのサ ート状況 • 公開されているプラットフォームサ ート • iOS: Apple Game Kit(Game Center) • Android: Google Play Games v2 • Windows: Microsoft Game Development Kit • Steam: Steamworks • クロー ドプラットフォームのサ ート • PlayStation®5 • Xbox Series XIS & Xbox One • Nintendo Switch™ & Nintendo Switch™ 2 ポ ポ ポ ズ https://docs.unity3d.com/Packages/[email protected]/manual/install-platform-modules.html
エ ィター上での動作確認 Play Mode Controlsによって、エ ィター上でシミュレート 実機 ルドには時間がかかるケースが多いため、エディターで簡易的な確認ができて便利 このタイミングでログイン var account = await PlatformToolkit .Accounts.Primary.Establish(); デ ビ デ エディター上でログイン挙動が シミュレートされる
Platform Toolkitがサ ートする機能 v1.0.0現在、下記の機能をサ ート • アカウント: プラットフォームのアカウントにログイン・取得 • アチーブメント: 達成進捗を更新 ポ ポ • セーブシステム: アカウントに紐づいたセーブデータの保存・取得
Platform Toolkitの使い方
Platform Toolkitのパッケージ構成 Platform ToolkitパッケージとPlatform Serviceパッケージの2つで構成 com.unity. platformtoolkit + Platform Service パッケージ https://docs.unity3d.com/Packages/[email protected]/manual/install-platform-modules.html
インストール方法 Unity Package Manager経由でインストール ポ Platform Toolkitパッケージと、サ ートしたいプラットフォームのパッケージをインストール
Play Mode Controls エ セット ィターの挙動を設定するためのアセット Window > Platform Toolkit > Play Mode Controls でウインドウを開いて作成する ア デ どのプラットフォームの挙動で 振る舞うかを設定できる
プライマリ カウントの取得 端末にロ インしているアカウント(プライマリアカウント)の取得 // Platform Toolkitの初期化 await PlatformToolkit.Initialize(); // プラットフォームがプライマリアカウントをサポートしているかチェック if (PlatformToolkit.Capabilities.PrimaryAccount) { // プライマリアカウントログイン var primaryAccount = await PlatformToolkit.Accounts.Primary.Establish(); // そのアカウントに紐づく名前の取得 Debug.Log($"Name: {primaryAccount.GetName()}”); ア グ }
キャパ リティ 動作中のプラットフォームがサ 各機能を使う前に、必ず対応するキャパ ートする機能を取得するインターフェイス リティをチェックする // プライマリアカウントをサポートしているかチェック if (PlatformToolkit.Capabilities.PrimaryAccount) { // プライマリアカウントログイン public interface ICapabilities { /// プライマリアカウントをサポートしているか bool PrimaryAccount => false; var primaryAccount = await PlatformToolkit.Accounts.Primary.Establish(); // … } /// セーブシステムをサポートしているか bool AccountSaving => false; } /// 実績をサポートしているか bool AccountAchievements => false; /// … ポ ビ ビ }
属性の取得
アカウントのプラットフォーム固有の情報を、指定した属性名で取得できる
if (primaryAccount.HasAttribute<string>("PLAYER_DISPLAY_NAME"))
{
var displayName = await primaryAccount
.GetAttribute<string>(“PLAYER_DISPLAY_NAME");
設定した名前で取得できる
Debug.Log($"Display Name: {displayName}");
}
GameKit(iOS)固有の情報
(例: GKPlayer.displayName)
アカウントに紐
く実績を更新できる
// アチーブメントをサポートしているか判定
if (PlatformToolkit.Capabilities.AccountAchievements)
{
// アカウントに紐づくアチーブメントシステム
var achievement = await primaryAccount.GetAchievementSystem();
// Single
achievement.Unlock("FIRST_CRYSTAL");
Single: フラグ的な実績
// Progressive
achievement.UpdateProgress("HANDLED_CRYSTALS", 50);
Progressive: 特定の閾値により達成される実績
づ
}
ブ
ア
チー メントの進捗更新
Achievement Editor アチー メントを管理するためのエ ィター Window > Platform Toolkit > Achievement Editorで開く デ ブ プログラムで扱う アチーブメントのIDと種類を定義 プラットフォームごとの アチーブメントのIDを定義
セー システム - 書き込み
アカウントに紐いたセー
ータの保存・読み込みができる
if (PlatformToolkit.Capabilities.AccountSaving)
{
// セーブシステム取得
var savingSystem = await primaryAccount.GetSavingSystem();
// 書き込みハンドラ
var writable = await savingSystem.OpenSaveWritable("SAVE_DATA");
// 書き込み
await writable.WriteFile("player", Serialize(player));
await writable.WriteFile("inventory", Serialize(inventory));
// 書き込みの確定
await writable.Commit();
アトミック性が保証される
(全ての書き込みが成功 or 失敗)
書き込み終わったら、Commitを呼び出して確定
}
デ
ブ
ブ
private static byte[] Serialize(object obj) =>
Encoding.UTF8.GetBytes(JsonUtility.ToJson(obj));
ファイルには byte[] を直接書き込む
セー システム - 読み込み
アカウントに紐いたセー
ータの保存・読み込みができる
// 読み込みハンドラ
await using var readable = await savingSystem.OpenSaveReadable(“SAVE_DATA");
// 読み込み
if (await readable.ContainsFile("player"))
{
var readPlayer = Deserialize<Player>(await readable.ReadFile("player"));
Debug.Log($"{readPlayer}");
}
ファイルの存在を確認してから読み込む
if (await readable.ContainsFile("inventory"))
{
var readInventory = Deserialize<PlayerInventory>(await readable.ReadFile("inventory"));
Debug.Log($"{readInventory}");
}
デ
ブ
ブ
private static T Deserialize<T>(byte[] data) =>
JsonUtility.FromJson<T>(Encoding.UTF8.GetString(data));
セー システム - Data Store API
セー
システムを用いた簡易的 (Key-Value) な ータストア
// DataStoreインスタンスの作成
// 第3引数は、セーブが存在しなければ作成するかどうかを指定
DataStore dataStore = await DataStore.Load(savingSystem, "SETTINGS", true);
// 書き込み
dataStore.SetFloat("volume", 0.8f);
dataStore.SetInt("difficulty", 2);
dataStore.SetString(“player_name", "Player1");
await dataStore.Save(savingSystem,"SETTINGS");
// 読み込み
// 第2引数は、存在しない場合のデフォルト値
var volume = dataStore.GetFloat("volume", 0.5f);
var difficulty = dataStore.GetInt("difficulty", 1);
var playerName = dataStore.GetString(“player_name");
デ
ブ
ブ
Debug.Log($"volume: {volume}, difficulty: {difficulty}, player_name: {playerName}");
終わりに • Platform Toolkitの概要について紹介しました • Platform Toolkitパッケージの概要・APIについて紹介しました • 別途 ロ にまとめたので、興味があれ 一読いた けれ と! • https://blog.yucchiy.com/2026/01/intro-platform-toolkit • https://blog.yucchiy.com/2026/01/platform-toolkit-acccount-system • https://blog.yucchiy.com/2026/01/platform-toolkit-achievement-system ば だ ば グ ブ • https://blog.yucchiy.com/2026/02/platform-toolkit-save-system
ざ ご清聴ありがとうご いました!