進捗
クリア後画面の共有機能を実装した。
仕組みとしては単純でクリア後画面の共有ボタンを押下すると適当なメッセージを設定してEasy MobileのSharing.ShareImage()を呼び出すだけ。iOS、Androidそれぞれの標準の共有機能を呼び出すため、共有するアプリの選択等はそちらで行う仕様。注意することとして、スクリーンショットをフレーム内のすべての描画処理が終わった後にとるため、ShareImage()はコルーチンの処理としてフレームの最後に処理が行われるよう制御する必要がある。
private IEnumerator DoSharing()
{
// フレームの最後にスクリーンショットをとるためにフレームの最後まで待つ処理。
yield return new WaitForEndOfFrame();
string path = Sharing.SaveScreenshot("screenshot");
// Share the image with the path, a sample message and an empty subject
var message = new StringBuilder();
// ここでメッセージをいろいろ設定
Sharing.ShareImage(path, message.ToString());
}

共有機能の実装は上記のとおりわずかな作業量で完了したため、次の作業であるチュートリアルの作成に着手した。今日のところはチュートリアルのシナリオ検討まで完了した。
gitでシーンファイルがコンフリクトした問題
今日の作業内容と直接は関係ないのだが、普段の開発をWindows機で行いiOS版のビルドの時のみMacBookを使用しており、コード管理にgitを使用している(はじめからMacに統一出来たらよかったが、スペックやら他の作業の兼ね合いやらでWindowsをメイン機にしている)。昨日、実績機能の動作確認のためiOS版でビルドしていたのだが、部分的な修正を加えてプッシュし、それを忘れたまま今日Windows機で別のブランチを切って共有機能を追加したところ、同一シーン内に変更を加えており、マージの際に見事コンフリクトが発生してしまった。今後も起こりえる話なので解決方法をざっくりメモ。
結論から書くとプロジェクト内の.git/configファイルを開き以下を追記。
※UnityYAMLMergeのパスは環境ごとに異なるため確認して適宜変えること。パスの区切り文字は必ず「/」を使うこと。
[merge]
tool = unityyamlmerge
[mergetool "unityyamlmerge"]
trustExitCode = false
cmd = "/Applications/Unity/Unity.app/Contents/Tools/UnityYAMLMerge" merge -p "$BASE"
その後、マージ作業中であればターミナル等から下記コマンドを入力するとシーンの変更をマージできる。
$ git mergetool
Normal merge conflict for 'Assets/TestScene.unity':
{local}: modified file
{remote}: modified file
Conflicts:
Conflict handling:
Assets/cube.unity seems unchanged.
Was the merge successful? [y/n]
この設定や手順については以下のURLから確認できる。
https://docs.unity3d.com/Manual/SmartMerge.html
残作業
- ゲームの説明シーン(チュートリアル)作成
- 音声をつける
- 広告の実装
- プライバシーポリシー作成
- プロモーションの作成
- リリース
共有機能の実装まで終えたため、チュートリアルシーンの作成に着手。
その他所感
共有機能の実装についてはEasyMobileのAPIを呼び出すだけで特に躓くようなところもなかった。強いて言えばスクリーンショットは画面をキャプチャするだけなので、共有するのに適した画面作りを意識しておく必要があるくらい。某診断メーカーなどSNS上で共有することが楽しみとなるアプリもあるし、何よりアプリの宣伝につなげられるので使えそうな場面では積極的に採用していきたいと思う。
チュートリアルの作成について、本来は特に説明もいらないくらい単純なゲームにしようとしていたところにいろいろ加えてしまったため、しっかり作りこまないといけない雰囲気になってしまった。チュートリアルを作るにあたってプログラム的にはメインのゲームシーンとは分けて作った方がいいのか、それとも、メインのゲームシーンをそのまま流用し、適宜フラグをチェックしてチュートリアル用の動作を行う作りとした方がいいのか、どちらがより楽なのかがわからない。できれば一般的な方法を採用したいがこの辺は作品や開発者次第だったりするのか疑問。
ゲームのロジックが複雑にならないようにするならシーンを分けた方がよさそうだが、これはこれで後々メインシーンに変更があった場合に追従して修正が必要になったりと所謂二重管理になるような気もしている。この辺もう少し調べるなり他の開発者に聞いてみたい気もする。