トルクル(TorqueL) 物理調整版 Xbox One/Windows 10 についてのメモ
はじめに
個人事業主としてID@Xboxプログラムに参加し、Xbox One/Windows 10向けに「トルクル(TorqueL) 物理調整版」を開発しました。
Xbox One版,Windows10版共に2017年10月18日配信開始となります。
本記事はそれにまつわるメモを(書ける範囲で)まとめたものです。
長くなるので、ざっくりとプレイヤー向け、開発者向けで分けています。
直接気になる項に飛びたい場合は目次からどうぞ。
留意事項
- 明確に書き分けるため、物理調整版ではないTorqueLを「オリジナル版」と呼称しています。
- 英語版のタイトルは "TorqueL -Physics Modified Edition-" になります。英語版タイトルを省略形で書くときは "TorqueL PME"あるいは"TorqueLPME"と書いています。
- 時間とともに状況が変わって、現実に即さない部分が出てくる可能性があります。あくまで現時点での話ということにご注意ください。
目次
- はじめに
- プレイヤー向け
- 開発者(開発に関心のある方)向け
- 終わりに
プレイヤー向け
「物理調整版」は結局何が同じで何が違うのか3行で
- ゲーム内容・システムはオリジナル版と一緒です。
- 物理エンジンの更新により、オリジナル版と各種挙動が異なります。プレイ感覚でわかりやすいところだと、「回転しやすく」なっています。
- Xbox Liveのコネクテッドストレージ、実績、スタッツ、リッチプレゼンス機能が実装されています。
「物理調整版」は何が違うのかもうちょい細かく
物理エンジンの更新について
今回、Unity 4からUnity 5への開発環境の変更を行いました。 これによってUnityが3D物理エンジンとして採用しているNVIDIA PhysXのメジャーバージョンが2から3へと変更されました。
そのため、Unityの3D物理エンジンを使用しているTorqueLは物理挙動が変更されることとなりました。
パラメーターの調整によって概ね同様の感覚でプレイできると思いますが、パラメーターとして設定できる項目も異なっています。やはり細かいところまで同一とはいきません。
実際できることが変わってくるので、ステージの構成変更も検討しましたが、変更なしでもクリアできることは確認できたので、ステージ構成はそのままです。(同じ操作でクリアできるとは限りませんが)
開発者本人がプレイした感触としては以下のようになっているかと思います。
- 回転しやすい
- 想像通りの動きをしやすくなった
- 想像から剥離した挙動が少なくなった気がします。
ちなみに、ただ伸びたり縮んだりさせるとゲームにならないので、伸びを抑制したり、縮めたりするコードを物理エンジンの各種プロパティから得て調整するコードをこちらで実装していますが。このコードはオリジナルから変更ありません。
Xbox Liveサービスの各種機能について
コネクテッドストレージ
セーブデータをXbox Liveを通してXbox One/Windows 10版で共有します。 セーブされる内容は以下の通りです。
- 最後にプレイしていたChamber(ゴール時に次のChamberから始まるように保存される)
- 左上に表示されているタイマーの時間
- そのプレイにおけるミス数
アカウントごとにセーブデータは一つしか持ちません。 タイトル画面で左側に出現する数字入りのゴールに入ることで、その状態からやり直すことができます。 Chamberのゴールに到達するとデータは常に上書きされます。 (※タイトル画面右側のゴールに入ったときにはセーブは行われません)
また、ルートを問わず、エンディングに到達した場合はセーブデータが初期化されます。
実績(Achievement)
PS4/PSVita/Steam版と同等のものになります。 以下、実績名のリストです、カッコ内はゲーマースコアです。
- Route: Unknown (90)
- Route: T (90)
- Route: o (90)
- Route: r (90)
- Route: q (90)
- Route: u (90)
- Route: e (90)
- Route: L (90)
- 10M (90)
- 60M (90)
- No Damage (90)
- 隠し実績2つ (各5ずつ)
今回の実装だと実績判定のロジックがXbox Live側にあるため、こちらからは他プラットフォームと同様のタイミングで各種データをスタッツとして送信しているだけになります。 そのため、プレイヤーに開放が通知されるタイミング異なったり、通知はされていないけれど開放されているなどがあったりします。
スタッツ(ヒーロースタッツ)
フレンド間での簡易的なランキング機能です。 以下の項目を設定しています。
- Beat Time: Any Route (昇順)
- クリアタイム(ルート不問)
- Beat Time: Route T (昇順)
- クリアタイム(ルートT)
- Beat Time: Route o (昇順)
- クリアタイム(ルートo)
- Beat Time: Route r (昇順)
- クリアタイム(ルートr)
- Beat Time: Route q (昇順)
- クリアタイム(ルートq)
- Beat Time: Route u (昇順)
- クリアタイム(ルートu)
- Beat Time: Route e (昇順)
- クリアタイム(ルートe)
- Total Beat Chambers Count (降順)
- 累計ステージ(Chamber)クリア回数
- Total Missed Count (降順)
- 累計ミス回数
なお、"Total Beat Chambers Count", "Total Missed Count"については、該当のイベントが発生した際に即座にスタッツを送信し、加算されます。
リッチプレゼンス
プレイ中のタイトル名とともにゲーム状況を表す文字列です。
"Box into [プレイ中のChamber名]"
というように設定します。
ユーザーアカウントの扱い
Xbox Oneはゲーム起動後にプレイするアカウントが選択される、またプレイアカウントを変更する機能があるため、そのために内部実装の変更による対応を行っています。
おおむねオリジナル版と差異のないシーケンスになっていると思います。
ただし、ホームメニューからの(プレイ中ユーザーアカウントの)サインアウト、オプションメニューの"Chamber User"(Xbox Oneのみ)などによって、プレイするユーザーアカウントを再度選択することがあります。
この時、現在プレイしているユーザーアカウントと別のアカウントを選択した場合、変更されたユーザーアカウントでセーブデータをロードし、タイトル画面に強制的に戻ります。 これは、意図しないセーブデータの上書きを防ぎ、スタッツ・実績などの整合性を保持するための仕様です。
開発者(開発に関心のある方)向け
ここから開発者向けの内容です。 書ける範囲で書いているので、なんだかはっきり書かないのはそういうことという感じでお願いします。
ID@Xboxへの参加について
ID@XboxとXbox Live Creator Programについて
機能的な違いなどは公式ページXbox Live クリエイター プログラム | Xboxをご確認下さい。
自分が今回の件を手がけるときにはXbox Live Creator Programの開始時期・参加方法についてまだ不明な時期だったので、ID@Xbox一択でした(打ち合わせでXbox Live Creator Programが話題に上がることはありましたが)。
現在ではXbox Live Creator Programも開始されているようなので、どちらにするか検討することが出来ると思います。
機能は違えと、Xbox Liveを扱うので、似たような実装で途中まで進めて...と行きたいところですが、今のところXbox Live Creator ProgramとID@Xboxで開発スキームやSDKが異なってくるようなので、その点は留意する必要があるかと思います。
参加プログラムとしてXbox Live Creator ProgramからID@Xboxへ移行することも可能なようなので、とりあえず出来る方からやってみるというのもありだと思います。
フォームから登録
以前、ツイートでも触れたように
何はともあれ、ID@Xboxのページから登録を進める必要があります。
基本的にはご自身の情報をそのまま打ち込んで行けば良いと思いますが、自身で取得した独自ドメインによるメールアドレスがあったほうが良いでしょう。
自分はもともとウェブサイトなどで取得したものがあり、そのメールアドレスでLive IDを取得・運用しています。独自ドメインによるメールアドレスがない場合、参加可能かどうかは確認はとっていません。
なんだか形式張っていて尻込みするかもしれませんが、本当にだめなら個人開発者の選択肢が消えたり、選択したときにシステム側で止めたりするはずなので、気にせず登録して良いと思います。*1
実際、自分も登録後に一度個人開発者向けはまだ開始できていない旨の連絡があり、後に今回の打診がありました。*2
必要書類
ID@Xboxプログラムはグローバルなプログラムで基本的にはローカルで特別対応を行っていないようです。
なので、個人事業主が参加できた今回の件について、日本だけの特別対応というよりは、日本の個人が取得可能な書類(おそらく会社だと法人登記などがそれにあたる)で参加可能であることが確認された。と言う形になります。
今回必要とされたのは以下の書類のいずれかでした。
確定申告をやっている方には覚えのある書面だと思います。青色申告はハードルが高い感がありますが、個人業の開業等届出書は青色申告とイコールではないので、これが一番容易に提出できるかもしれません。
ただ、これらの書類は税務署に一部だけ提出して手元にない、という方もいるかも知れません。
同じ書類を税務署に二部提出すると一部は税務署確認済みの控えとして取得できる仕組みがあります。しっかり二部用意して提出した方はその控え(のコピー)を提出すれば問題ないかと思います。
一部だけ提出して、後日その控えを取得したい場合は、該当の税務署に保有個人情報開示請求書を提出して原本の複写をもらうことが出来るそうなので、その方法で取得するのも手かと思います。
自分はFullPowerSideAttack.comを屋号として確定申告を電子申告で行っており、「受信通知データと申告データをプリントアウトしてセットにしたものが、確定申告書の控えとなる」という情報を見つけたので、これ(のデータ)を「青色申告書」と同等のものとして提出しました
個人情報ど真ん中なので、提出・送付方法は少し考えたほうが良いかと思います。
以降は(あるいはいくつか並行して)、各種契約や書面の取り交わしなどが発生します。
基本マイクロソフト本社とのやり取りになるため英語の書面が多いですが、日本マイクロソフトの方で参考訳を付けてくれたり、サポートに入ってくれたりするので、特に問題なく進められると思います。
Unity 5への更新について
ID@Xboxへの参加にあたり、さしあたってトルクルの移植を行うというのはほぼ既定路線でしたが、以下の点が問題になりました。
この点についてマイクロソフトに確認をお願いしました。
結果、Unity 4ベースでの開発は「現在は使用できない」との回答を得ました。
次に
- Unity 5へ移行して問題なく開発が可能か(特に物理エンジンのアップデートにまつわる点)
この点についてこちらで検証を行い、
- 物理挙動は異なるが、自動アップデートによる問題点を逐次改善すれば開発は可能
- この時点では全てのステージを確認できたわけではないため、一部ステージについて構成を変更する可能性がある(※最終的には変更無しで済んだ)
と結論づけました。
参考:Unity - マニュアル: Physics in Unity 5.0
ゲームとしては同じですが、物理挙動が異なり、パラメーターを改めて調整すること、また一部ステージについて構成が変更する可能性があったことから「物理調整版」と副題をつけることにしました。
物理調整版の英訳については
- Physics Modified Edition
- Physics Upgraded Edition
- Upgraded Edition
あたりが候補に上がりましたが、Upgradedだと、個人的には意味するところが合わないかなということでPhysics Modified Editionにしました。
コードについては、Unityのバージョンアップによってそもそもエラーで動作しなくなるパターンや、非推奨となったメソッドなど以外の点は極力そのまま使う方針で進めました。
たとえばUIにNGUIを採用していますが。一部Unity5と互換性が取れなかったところを変更しただけでNGUI全体を最新パッケージに更新したりはしていません。
開発についての心構え
全てを詳らかにすることは出来ませんが、経験的にはXbox Oneに限らず、以下の点についてはほぼ全てのプラットフォーム間で実装や規定が異なると思って良いでしょう。
- ユーザーのキーボード・ゲームパッドでの入力
- 画面出力・音声出力
- ファイル読込・書き込み
- ネットワーク
- パッケージング
Unityを使うことで、ある程度は意識することなく対応できますが、Unityの仕組み・知識だけで全て完結するのは難しいと考えます。
- ユーザーのキーボード・ゲームパッド・タッチでの入力
- UnityのKeyCodeやInput Managerが有効に使えるなら特に意識しなくて良いが、特殊なデバイス・入力に対しては注意が必要
- 新しいInput Managerで色々よくなるといいですね...
- 画面出力・音声出力
- とりあえず動かすだけであれば、画面出力はシェーダーがアーキテクチャー的に利用できないなどが無い限りは特に意識しなくて良い
- 音声についてはステレオ(2ch), 5.1chだけでなく用途別の仮想ミキサーを採用しているプラットフォームもあるので、切り分けできるようにしておくとベター(コントローラーのスピーカーや配信で乗せたくない音声などなど)
- 画像、音声ともにプラットフォームで扱えるフォーマットが違って来ます。フォーマットの画質・音質も重要ですが、圧縮展開にかかる処理量も重要です。
- 音声データは下手な設定にするとUnityエディターのプラットフォームを切り替えるたびに圧縮の時間を長く取られたりします。
- ファイル読込・書き込み
- ステージの読み込みなどはUnityが(ほぼ)勝手にやってくれる、非同期的にやりたい場合は少し工夫が必要。AssetBundleの利用を勧められる場合もある。
- セーブデータの読込・書き込みに関してはプラットフォームにより実装や規定が千差万別で注意が必要。また、アカウントの取扱も絡むことがある。PlayerPrefsが使えるとは限らない。
- ネットワーク
- パッケージング
- Unityでビルド設定してビルドボタンでパッケージ完成...とは行かない場合がある。ビルドスクリプトを用意しておくと便利。提出やテストプレイにも関連するので初期段階など早めのタイミングで確認することを推奨
Xbox One / Windows 10 で Xbox Liveサービスを共有するゲームの開発について
Xbox Liveサービスを共有する場合、現状ではそれぞれのサービスの繋ぎ込み作業が必要になるため、マイクロソフトからはXbox One版の開発を先に行うことを勧められました。
実際、Xbox Liveサービスの利用法がほぼ確定するまでXbox Oneを先行して開発し、それからWindowsストア版の開発を並行して行いました。
Xbox Liveサービスを共有するということで、なんだか共通フレームワークやSDKがあってワンコードで両プラットフォーム対応! と行きたいところですが、残念ながら今回はそう行きませんでした。
もちろん最終的に使うサービスが同じということで似通った名称や機能ではあるのですが、実際にはプラットフォームの#define ディレクティブを使って書き分けたうえで同じ機能が実現されるようにする、という感じです。
開発環境
Xbox One
- Unity 5.6.2f1 Pro
- Visual Studio Community 2015 Version 14.0.25431.01 Update 3
- Xbox One用SDK, Xbox One用Unity各種プラグイン・サポート
Unityのバージョンは開発中5.4->5.5->5.6とちょっとずつ上げていきました。
これはXbox Oneの開発を進めつつWindows 10向けの情報を収集しているとき、Windows 10も同じバージョンで進めようとすると、どうやら上げたほうが良さそうだと都度判断していったからです。
Windows 10
- Unity 5.6.2f1 Personal
- Visual Studio Community 2015 Version 14.0.25431.01 Update 3
- Windows 10 SDK 10.0.14393.795 + Xbox Live Platform Extensions SDK
- Nugetパッケージとバージョン
開発工程上、UnityのBuildから出力したSolutionを改めてVisual Studioで開いて開発を進めていく形になります。 Windowsストア用のUnity解説としてNETFX_COREディレクティブを使用したものが多く見つかるのですが、Unityから開いたVSだとこのディレクティブを認識してくれません。
デバッグやリリースのWindowsストアへ提出するMasterのビルドもVisual Studio主体で進めることになります。
また、開発を始めたUnityのバージョン的にはIL2CPPは対応していないようだったので。Scripting Backend は.NETで開発しました。 IL2CPPで開発する場合は使用するXbox Live関連のNugetパッケージが変わってくるはずです。
VS2017でもビルドなどは問題なくできていましたが、VS2015で進めていて特に問題なさそうなのでVS2015で通しました。
Microsoft.NETCore.UniversalWindowsPlatformの5.3以降はVS2017からの対応になっているようです。
ちなみに、GitHubで公開されているMicrosoft/xbox-live-unity-plugin: The Xbox Live Unity Plugin provides a way for developers to quickly and easily integrate Xbox Live functionality into their Unity based game.については現状Live Creator Program用で、今回の要件では使えないと回答を得ています。
なお、Unity 5.6.2f1はUNITY-SEC-844に未対応のバージョンなので、Unity - Mitigation toolを適用しています。
Windowsストアダッシュボード
Windows ストアを管理するためのLive IDが必要になりますが、ID@Xbox参加に使用したLive IDを使用することもできます。
自分は別のLive IDでDAC変換版をリリースしていたので、そのLive IDをそのまま利用しています。 この場合、それぞれのLive IDを連携する作業が必要になります。
なお、ID@Xbox参加者が、まだWindowsストアの開発者ライセンス取得していない場合は無料で取得できるそうです。
また、WindowsストアのTorqueLPMEとXbox OneのTorqueLPMEが同じXbox Liveサービスを利用するためにマイクロソフト側で作業が必要になります。
これは今のところ開発環境として共用できるようにする作業と、リリース環境で共用できるようにする作業とで別になっているようです。
サンドボックスについて
Xbox Liveサービスを活用した開発について、開発用のXbox Liveが必要です。これはサンドボックスという言葉でよく説明されています。
サンドボックスはXbox Liveサービスの区分けのようなもので、リテール環境と同等のサービスを開発専用に用意するものです。 通常のプレイヤーが利用しているXbox Liveのリテール環境も、リテールというサンドボックスであるという捉え方ができると思います。
WindowsダッシュボードからWindowsアプリを新規作成するとき、サンドボックスを作成するチェックボックスがあります。 これにチェックするとサンドボックスが利用できるアプリとして作成できるようです。(今回は使わなかったので...)
Xbox Oneについて、別の管理コンソールがありますが、こちらでもXbox Liveのサンドボックスという概念は共通しています。
現在Windowsダッシュボードから作成するサンドボックスはLive Creator Program用のもので、Xbox One(ID@Xbox)のものとは機能面と管理方法が異なります。
しかしながら、
- 専用の名前がついたサンドボックスが開発者に割り当てられ
- アクセス可能な権限を持った開発用アカウントでテストする
という点は共通しているものと思います。
今回はWindowsダッシュボードからサンドボックスの作成を一切行わずに開発を進めました。
これは、もとよりXbox One側のXbox Liveを共用することを決めており、開発用とはいえ不用意にサンドボックスが増やして管理の手間がかかるのを避けたためです。
Windows 10でのテストは開発者向け設定から「サイドロードアプリ」か「開発者モード」に切り替え、Xbox Live – Microsoft DeveloperにあるXboxLiveToolsを使ってサンドボックスを指定し、Xboxアプリで開発者アカウントでログイン・切り替えすることで行いました。
開発情報の検索について
言うまでもなく、Xbox One開発についてインターネット上を検索しても特に情報は見つかりません。
適切な権限が設定されたフォーラムやサイトがあるので、そこを検索することになります。
マイクロソフトの技術者に質問することができるので、確実な情報はそのように得るようするとよいかと思います。
Windows 10あるいはWindowsストア向けについて検索すると、結構な数の情報が見つかるのですが。玉石混交です。
これは単に情報がたくさんあるからピンからキリまであるというだけではなく。
Windowsストア自体は8のころからあったりするために古い情報が大量に引っかかったり、
新しい情報でも呼び方がメトロ(Metro)アプリ、UWP(UWPアプリ)、WSA(Windows Store Application)などどうにも一定しておらず一発で目的の情報にたどり着くのが難しくなっています。
ただ、Windowsストア用にXbox Liveが使えるという話は割と最近の話ではあるので、今後探しやすくなるのではないかと思います。
自分はGitHubで公開されているサンプルコードと公式ドキュメントの合わせ技(と公式への問い合わせ)で何とかしました。
サンプルコードの通りにやればとりあえず動きますが、実際に配信するアプリケーションへの実装についてはエラー処理や多様な状況への対応など一工夫が必要な感じでした。
Windows 10 開発Tips
書いても問題ない範囲でハマりそうなところを箇条書きでまとめておきます。
- リッチプレゼンスの動作にInternetClient権限が必要
- 実績・コネクテッドストレージ・スタッツはなくても問題なく動作した
- HTTP Status 65535とか言い出されてわけがわからなかった
- スケーリングを無効にする方法 - UWP app developer | Microsoft Docs
- Unity内部で設定した解像度と見た目一致しなくなるので必要なら無効にする。
- D3Dだとそもそも無効らしいんですが、テストしていたらスケールされていたので明示的に無効にするようにしました。
- [UWP][XBOX] XB1 Window Size
- Unity内部で設定した解像度と見た目一致しなくなるので必要なら無効にする。
- セーブデータのMapのデータとしてbyte[]ではなくIBuffer型を使う必要のあるケースがある
- 解像度・アスペクト比固定ができない
- 今回はカメラのrectでゲーム画面のアスペクト比を維持する形にしました。
- windows - UnityからビルドしたWindows ストアアプリで、ウィンドウサイズの変更に対応するには? - スタック・オーバーフロー
- ゲーム内から解像度を変更するときは16:9の解像度しか選択肢に出ないようにしてあります。
他、以下に参考用にメモしておいたURLを残しておきます。(一部Live IDがないと読めないとかがあるかもしれません)
- Get started with Xbox Live as a partner - UWP app developer | Microsoft Docs
- Step by step guide for Xbox Live partners - UWP app developer | Microsoft Docs
- Unity for UWP with .NET scripting
- Get started with cross-play games - UWP app developer | Microsoft Docs
- Windows 10 ゲーム開発ガイド - UWP app developer | Microsoft Docs
- Unity - Windows Microsoft porting guides
- Unity - マニュアル: Windows ストアアプリ: .NET scripting backend のプロジェクトの解説
- UWP アプリのパッケージ化 - UWP app developer | Microsoft Docs
- Task.Waitの問題点
- Unity - マニュアル: Windows ストアアプリ: .NET Scripting Backend でのデバッグ
- Windows 10 UWP アプリのライフサイクル - UWP app developer | Microsoft Docs
- Visual Studio で Windows ストア アプリの中断イベント、再開イベント、およびバックグラウンド イベントをトリガーする方法
- Unity - Scripting API: MonoBehaviour.OnApplicationPause(bool)
- Windows ストア ポリシー - Windows app development
- 開発者倫理規定 - Windows app development
- App Developer Agreement - Windows app development
と、URLを並べましたが、特にマイクロソフトのサイトについてはURLがいきなり変わることがあります。今回の開発中にもしばしばURLが突然404になっているのに遭遇しました。
Live Creator Programの関連もあって激しく更新されていた印象はありますが、同等の内容をまた一から探し直しは勘弁してほしかったです。
ゲーム内のローカライズについて
トルクルはもともとゲーム内が全て英語表記であり、今回もゲーム内のローカライズは特に行っていません。
マイクロソフトさんからローカライズについて支援が出来る場合もあるようなので、相談してみるとよいかと思います。
細かすぎて伝わらない変更点
起動シーケンス
起動シーケンスを大幅に変えています。
特にXbox Oneについてはゲーム起動後にプレイするアカウントを選択する、というシーケンスが標準になっており、これに対応する必要がありました。
ゲーム起動後にアカウントを選択、だけならまだいいのですが、ホームメニューからユーザーが任意のタイミングでログアウトできるため、途中でアカウントが変更されることを想定しながら本体やXbox Liveサービス関連の処理をしなければならず、「起動シーケンス」とは書いたものの、システム的な部分では全面的に手を入れる形になっています。
AssetBundle
ステージのBGM(プレイヤーの操作に合わせて鳴る)について、シーンへの埋込みからAssetBundleからの読込みに変更しています。
AssetBundle関連で情報を探してみると、いわゆるスマホアプリで、オンライン上のAssetBundleを読み込む方法や開発手法についての記事がよく見つかります。
オフライン(パッケージデータに予めAssetBundleを含めておく)での扱い方の情報はなかなか見つからなかったので、ここに軽く書いておきます。
一応ここらへんを参考にして
ProjectウィンドウでBGMデータ選択し、AssetBundle名を設定。今回はデータをひとまとめずにbgm01,bgm02という風に分けて命名していきました。
Assets/Editor に以下のようなAssetBundleビルドスクリプトを追加
using UnityEditor; public class CreateAssetBundles { [MenuItem("Assets/Build AssetBundles")] public static void BuildAllAssetBundles() { string streamingAssetsPath = "Assets/StreamingAssets"; if (!AssetDatabase.IsValidFolder(streamingAssetsPath)) { AssetDatabase.CreateFolder("Assets", "StreamingAssets"); } BuildPipeline.BuildAssetBundles(streamingAssetsPath, BuildAssetBundleOptions.None, EditorUserBuildSettings.activeBuildTarget); } }
Assets/Build AssetBundles がメニューに追加されているので、選択して実行。
Assets/StreamingAssets に各AssetBundleが出力される。
StreamingAssetsフォルダはビルド先にそのままコピーされる特殊フォルダ。
プラットフォームが変わるとAssetBundleが読み込めないことがあるので、プラットフォームを変えるたびにBuild AssetBundlesを実行することになる。
ビルドスクリプトがある場合、ビルドスクリプトでのビルド前にAssetBundleをビルドし、AssetDatabase.Refresh()を実行するようにすると少し便利。(オプションがデフォルトの時不要な場合にはビルド処理は行われない)
以下のような感じでAssetBundleをロードしてBGMデータをAudioClipにセット。
string bgmAssetName; static AssetBundle bgmAssetBundle; if (bgmAssetBundle != null) bgmAssetBundle.Unload(true); if (bgmAssetName != "") { AssetBundleCreateRequest bundleFileOperation = AssetBundle.LoadFromFileAsync(Path.Combine(Application.streamingAssetsPath, bgmAssetName)); yield return bundleFileOperation; bgmAssetBundle = bundleFileOperation.assetBundle; AssetBundleRequest bundleRequest = bgmAssetBundle.LoadAllAssetsAsync(typeof(AudioClip)); yield return bundleRequest; AudioClip clip = bundleRequest.allAssets[0] as AudioClip; AudioSource audioSource = GetComponent<AudioSource>(); audioSource.clip = clip; }
あとはよしなに。
レーティングについて
レーティングの基礎知識
国や地域によって表現の解釈はもちろん、自主規制的なものであるか、国が公的に倫理審査を必要とするものかが異なります。
日本国内で身近なところだとCERO(コンピュータエンターテインメントレーティング機構),あるいはソフ倫、メディ倫といったところになるでしょうか。これらはいずれも自主規制です。
自分がわかるところだと、韓国(GRB,GRAC)・ドイツ(USK)は公的機関がレーティングを行っています。
条件により無料で済んだり、有料の中でも所要日数や諸々で色々なプランがありますが、今回関係のあるものだけに絞って書いています。なお、ここで記載のあるレーティング・地域だけが配信可能というわけではありません。
また、海外記事ですが、Gamasutra - How paying for content ratings is hurting devs who release in Europe も合わせてご参考下さい。
Windows 10版は韓国を除き、IARCによるレーティングが適用できます。Windowsダッシュボードからのアプリ配信設定の流れで取得することができるので、ここでは特に説明しません。
Xbox One版は現時点ではIARCによるレーティングは利用できないとのことだったので、各地域レーティング機関によるレーティング取得が必要になります。
トルクル(TorqueL)物理調整版ではCERO,ESRB,PEGIのレーティングを取得しました。
なお、レーティング機関という括りでは同じように考えがちですが、表現の解釈やプロモーション上の取り扱いなどが異なります。
常に変わっていくため、販売を行うものが各レーティング機関の最新文書を読み込む必要があります。
CERO
日本で配信するために必要です。
CEROと直接やり取りして個人でも手続き可能です(Wii U版開発の際に確認済み)。
CEROはCERO会員・非会員でレーティング取得費用が変動します。
CEROレーティングについてはマイクロソフトから支援を受けられる場合もありますので、他地域のレーティングと同様に確認をしてみるとよいかと思います。
CEROは映像による審査になるため、以下のような映像を用意する必要があります。
- ゲームスルー映像(ゲームの一覧の流れが分かる程度の映像)
- 個別にコンテンツアイコン表現に掛かりそうなところの映像
トルクル物理調整版のCEROレーティングは"A"になりました。
ESRB
米国とカナダで配信するために必要です。
ESRBのウェブサイトのContactフォームから連絡をとり、メールでのやり取りを行ったところ、日本の個人(非会社)*3でもパブリッシャーアカウント取得と諸手続きが可能との回答を得ました。
ESRBのレーティング手続きにはLong Form Rating Process と Short Form Rating Process があり、Long Formは旧来通りのレーティング取得、Short Formはあらゆるパッケージ化を行わないダウンロード専用ゲーム用です。
Long Formは映像による審査(有料)、Short Formはセルフレーティング(無料)になります。
トルクル物理調整版(TorqueL -Physics Modified Edition-) Xbox OneのESRBレーティングはShort Formでのセルフレーティングで"E(Everyone)"になりました。
PEGI (PEGI-PT)
ドイツを除いた欧州各地域(約30地域)で配信するために必要です。
マイクロソフトの関連資料に記載されていた連絡先にメールで問い合わせた所、日本の個人(非会社)でもパブリッシャーアカウント取得と諸手続きが可能との回答を得ました。
Casual Game という区分があり、450MB以内(で16個未満のゲーム)のゲームについて、通常トラックでは 260 EUR で取得依頼が可能となっています。ファストトラックだと500 EURになります。 この区分であっても他の区分同様のレーティングチェックが行われます。
上記の容量による条件や費用については周辺状況により変更の可能性があります。(対日本の為替だけではなくEUR自体の状況によって変更されることもあるようです)
Casual Gameの区分に入らない場合、いわゆる通常のレーティング取得となりますが、開発費用や販売を行う地域数・トラックの選択など諸条件でレーティング費用が変わりますが、ここでは説明しません。先に書いた通り、費用に関わらずレーティングチェック自体は同じように行われます。
PEGIレーティングチェックに必要な資料類は以下の通りです。
- ゲームスルー映像
- カットシーン映像全て、時系列で確認できるように
- 事前チェックシート(PEGIウェブサイトでの申し込み中に必須なので特に意識はしない)
- ほぼ完成に近いビルド(実行方法や確認手順・セーブデータなども合わせて用意)
PEGIの口座は日本にないので、費用は国外への外為送金になります。送金方法は事前によく確認しておく必要があります。
というのも、銀行によってそもそも国外への送金が不可能であったり、事前の申込みや振込先の登録が必要であったり、可能でも手数料諸々が異なってくるからです。
自分が送金したときは諸々込で 約36,000円でした。(通常トラック、円から送金手続き、チャージ込み)
なお振込後、送金した証明を送らないと先に進みません(担当者は銀行口座を直接チェックできるわけではないそうです)。
自分は外為送金後に銀行から送られてきた書面をスキャンして送りました。
また、以下の点に留意しておくと良いかと思います。
- 事前チェックシート段階での事前判定によって管轄する組織が変わります(PEGI-3,7はPEGI-NICAM PEGI-12,16,18はPEGI-VSC)
- PEGIは一部ではレーティング年齢が読み替えられる地域が存在します。基本的には気にしなくてよいのですが、現時点ではポルトガルについてはPEGI-PTと呼ばれる別項目が用意されており、これが必須とされています。
- パッケージのメタデータに専用項目が増えています。これに気づかずにプラットフォーマーのチェックで引っかかるのが多いと聞いています
- 「質問することを躊躇しないように」PEGIでもESRBでもそうでしたが、大抵担当者からのメールに同義のことが添えられています。資料を読み込んでもわからないことはとにかく聞きましょう。
なお、レーティング取得にあたり、レーティング担当者が初めてレーティング取得を行う場合にはPEGIが用意したeラーニングを受ける必要があります。(ラーニングの最後にテストもあり、そこで取得できるコードを入力する欄があります)
余談、PEGIのeラーニングでのViolence(暴力)のPEGIでの解釈が理論立ててあってとても興味深かったです。なにかの機会にご紹介できるといいのですが。
トルクル物理調整版(TorqueL -Physics Modified Edition-) Xbox OneのPEGIレーティングは"3"、PEGI-PTレーティングは"4"(PEGI 3がPEGI-PT 4に相当)になりました。
と、書いていたところ、ポルトガルが近い将来PEGI-PT 4を廃止しPEGI3を使用するを決定をしたようです。PEGI-PT 6についてはそのままのようですが。これからどうなるかはわかりません。
USK (Unterhaltungssoftware Selbstkontrolle)
欧州でもドイツはPEGIではなくUSKによるレーティングが必要です。
現在はレーティング未取得(Unrated)でも配信可能となっています。ただし、その場合は一番高い年齢レーティングと同じ年齢区分・ペアレンタルコントロールの対象となるそうです。
トルクル(TorqueL)物理調整版 Xbox OneはUSK Unrated(つまりレーティングなし)での配信となります。
FPB (Film and Publication Board)
南アフリカのレーティングです。PEGIレーティング取得済みの場合はそのレーティングを利用することで配信可能です。
DJCTQ
ブラジルのレーティングです。ESRBまたはPEGIレーティングが取得済みの場合はそれを利用したセルフレーティングで配信可能です。
トルクル物理調整版(TorqueL -Physics Modified Edition-) Xbox OneのDJCTQレーティングは"L"になりました。(ESRB Everyoneに相当)
PCBP
ロシアのレーティングです。PEGIレーティング取得済みの場合はそれを利用したセルフレーティングで配信可能です。
トルクル物理調整版(TorqueL -Physics Modified Edition-) Xbox OneのPCBPレーティングは"0"になりました。(PEGI 3に相当)
MDA(Media Development Authority, よく「メディア開発庁」と訳される)
シンガポールのレーティングです。今のところはPEGIの値が使用されるようで、PEGIレーティングを取得していれば配信可能です。
トルクル物理調整版 Xbox One配信リージョンとレーティング対応表
今回Xbox Oneで配信した地域と、レーティング機関の対応をまとめると以下の表のようになります。(地域名の並びは順不同)
地域(リージョン) | レーティング機関 | 備考 |
---|---|---|
日本 | CERO | |
アメリカ カナダ | ESRB | |
オーストリア ベルギー チェコ デンマーク フィンランド フランス ギリシャ ハンガリー イスラエル イタリア オランダ ノルウェー ポーランド ポルトガル アイルランド サウジアラビア スロバキア スペイン スウェーデン スイス トルコ UAE イギリス | PEGI | ポルトガルはPEGI-PT |
ドイツ | USK | Unratedで配信可能 |
南アフリカ | FPB | PEGIレーティングの値を利用可能 |
ブラジル | DJCTQ | ESRBまたはPEGIベースのセルフレーティング |
ロシア | PCBP | PEGIベースのセルフレーティング |
シンガポール | MDA | PEGIレーティングの値が使用される |
ストア・ウェブサイト用のテキスト・素材について
テキスト情報
Xbox One/Windowsストアのテキスト情報として以下の項目を用意しました。
- Title
- Alternate Title
- Short Title
- Sort Title
- Voice Title
- Description
- Short Description
- Publisher Name
- Developer Studio
- App Features(アプリの機能)
- Recommended Device(お勧めのハードウェア)
- Developed by(開発元)
なお、Windowsストアのアプリ名(Title)については事前に予約作業が必要です。
こちらについてもマイクロソフトさんからローカライズ支援が出来る場合もあるようなので、相談してみるとよいかと思います。 (今回はTitleの英語名に関する印象やDescriptionの英語訳について支援頂きました)
日本語は全て自分で用意しました。 英語のDescriptionについてマイクロソフトに翻訳支援を受け、その一部分をShort Descriptionとして利用しました、それ以外は自分で用意しています。
また、今回の配信地域だと「ポルトガル語」「イタリア語」「ドイツ語」「スペイン語」「フランス語」での情報が必要とのことだったので、Description, Short Descriptionについては英訳文をBing翻訳で用意し、それ以外は英語用をそのまま使用しています。
画像素材
以下の項目の画像を用意しました。カッコ内は今回用意したサイズです。
- Box Art (1080x1080px)
- Branded Key Art (584x800px)
- Poster Art (720x1080px)
- Featured Promotional Art(1080x1080px)
- Super Hero Art (1920x1080px)
- Titled Hero Art (1920x1080px)
- Image Gallery, Screen Shot (3840x2160px)
- Store Logos (720x1080px, 1080x1080px)
- Promotional Images (3840x2160px, 2400x1200px)
- Trailer Thumbnail (1920x1080px)
サイズ(縦横比)、タイトルありなし、ブランドロゴの取り扱いなど各種要件の取り決めがありますので、それに沿うようにしています。
Trailer Thumbnailはゲームトレーラー提出時に必要になります。映像を作った段階で満足して忘れがちですが、用意しておきましょう。
ゲームトレーラー
今回トレーラーとして、一切テロップを入れずにゲーム画面だけで1分程度の映像を作成しました。
同一内容ですが、配信地域とレーティングの兼ね合いで、計4種類の映像を用意しました。
- ESRB対象地域向け(冒頭にESRBロゴ、2秒)
- PEGI対象地域向け(冒頭にPEGIロゴ+ボイスオーバー、2秒)
- PEGI-PT対象地域向け(冒頭にPEGI-PTロゴ+ボイスオーバー、2秒)
- それ以外の地域向け
ESRB, PEGI, PEGI-PTについては、プロモーション上の取り扱いが定められているので、それに沿う形にしています。 結構詳細に定められているので、資料をよく確認する必要があります。(映像以外でも取り決めがあります)
なお、ここでの対象地域というのはレーティング機関の取り扱っている地域と完全に一致するわけではないようなので、マイクロソフトの資料などを確認する必要があります。(それで何度か出し直しています)
今回のトレーラーとトレーラーの配信地域と言語の関係は以下の通りです。(地域名などの並びは順不同)
トレーラー種類 | 配信地域と言語 | 実際の動画(YouTube) |
---|---|---|
ESRB対象地域向け | カナダ(英語) カナダ(フランス語) アメリカ(英語) アメリカ(スペイン語) メキシコ(スペイン語) | https://youtu.be/u9Eee8kkMZ8 |
PEGI対象地域向け | デンマーク(デンマーク語) ベルギー(オランダ語) ベルギー(フランス語) オランダ(オランダ語) チェコ(英語) ギリシャ(英語) ハンガリー(英語) アイルランド(英語) イスラエル(英語) スロバキア(英語) イギリス(英語) フィンランド(フィンランド語) フランス(フランス語) スイス(フランス語) スイス(ドイツ語) オーストリア(ドイツ語) イタリア(イタリア語) ノルウェー(ノルウェー語) ポーランド(ポーランド語) スペイン(スペイン語) スウェーデン(スウェーデン語) トルコ(トルコ語) | https://youtu.be/RSZsavXEQUs |
PEGI-PT対象地域向け | ポルトガル(ポルトガル語) | https://youtu.be/xzzgaYXuIOA |
それ以外の地域向け | 日本(日本語) 香港(中国語) 香港(英語) 中華人民共和国(中国語) シンガポール(中国語) シンガポール(英語) 台湾(中国語) オーストラリア(英語) インド(英語) ニュージーランド(英語) サウジアラビア(英語) 南アフリカ(英語) UAE(英語) ドイツ(ドイツ語) 韓国(韓国語) ブラジル(ポルトガル語) ロシア(ロシア語) アルゼンチン(スペイン語) チリ(スペイン語) コロンビア(スペイン語) | https://youtu.be/Kf5qN2xSDP4 |
YouTubeは全部埋め込むとさすがに重いのでURLでの案内にさせていただきました。
税関連の書類・手続きについて
ID@Xboxの契約は本社との契約になるため、売り上げも本社から受け取る場合が出てきます。
何もしなければ米国企業から米国非居住者への所得は源泉徴収(現在30%)が引かれたものが受け取る金額となります。 なお、米国で源泉徴収されているから日本で支払わなくてよいかというとそういうわけではありません。
これだと所得税が二重にかかってつらいということで、日本と米国間で日・米租税条約が締結されており、日本で所得税等を支払う方は米国の所得税(源泉徴収)を免除してもらうことができます。
日本居住者が米国からの所得税を免除してもらうために行う手続きをざっくりと書くと
- 米国IRSにコンタクトを取り、ITINまたはEINを取得する
- 所得を支払う企業にW8BENまたはW8BEN-Eを提出し、源泉徴収のない売り上げを受け取るようにする
ということになるかと思います。
初期のiOS開発者プログラムや、Amazon KDP、Steamでのやり取りがある方はすでにITINやEINを取得済みかもしれませんし、これらの経験がある方はW8BEN(-E)に関しても経験があるものと思います。
ちなみに、ID@Xboxに参加するときにこれらの作業はまだ必要になりません。 最終テストの日程が大まかに決まってきて、実際のリリースが近づいたぐらいにW8BEN(-E)の手続きを進めていくことになります。
ただし、IRSへのコンタクトからのITIN,EINの取得は時間のかかるケースがあるので、これだけはひっそりと進めておくとよいでしょう。
自分は以前別件でEINを取得しており、それを使用してW8BEN(-E)を提出しました。確か当時電話・エアメール・FAXでの取得が可能だったと思うのですが、コンビニからFAXをIRSで送り、しばらくしてエアメールでEINの通知が来ました。(何かミスがあると何も連絡なく何も来ないらしいです。)
一度(一社)やってみてしまえばあとはルーチンで、と言いたいところなのですが、当然各国制度や書式・法律が改正されることがあります。
自分が知る範囲でも
- IRSのFAX番号は何度か変更されている
- EINの場合、W8BENではなくW8-BEN-Eという別の書式で提出するように変更された
- 上記に関連して、EINでW8BEN(-E)の更新手続きを行うときに若干特殊な操作が必要になるところがあった
といったことは起きていますので、常に最新の正しい情報を収集するよう心がけるとよいかと思います。
終わりに
冬のコミケット93(C93)で今回の諸々を開発者用にまとめた同人誌(冊子になるかも)を頒布する計画を立てています。
基本的にはこの記事の内容を再編・補強したものになります。
進捗次第ではデジゲー博2017でなにか頒布...できるかもしれません。
サークルのツイッターアカウント(@fpsacom)をフォローしておいていただければ諸々お知らせできるかと思います。
最後までお読みいただきありがとうございました。
もし質問などあればこちらの記事のコメントか、個人のTwitterアカウント(@nanimosa)の方にいただければと思います。
デジゲー博準備会より、当選と配置場所の連絡をいただきました。https://t.co/dsaDTfKINz は F-12ab (2階 AKIBA_SQUARE)での配置となります。
— FullPowerSideAttack. (@fpsacom) 2017年9月14日
11月12日に会場でお会い出来ましたら幸いです。https://t.co/D44fhYmj4h pic.twitter.com/AvNtyaILr7
【イベント】コミックマーケット93にサークル参加申し込みを行いました。
— FullPowerSideAttack. (@fpsacom) 2017年8月29日
参加内容はサークルカットの通り、今回のID@Xbox参加にまつわる体験・知見などをまとめたものを頒布する予定です。(実際の入稿データはグレイスケールとなります)#TorqueL #IDatXbox #C93 pic.twitter.com/mAdNZDVrBe
追記: 同人誌できました。 niyoru.strikingly.com