オセロ制作記録 第4章:16日目~20日目

16日目:ビジュアル修正3

[add]新規追加

  • 石が0になったら途中勝ちになるようにした
  • 広告を実装した
  • プライバシーポリシーの表示

[update]機能修正

  • スタート時のUIをちょっと良くした
  • ローディングのアニメーションも付けてみたり
  • 広告用にUIの遷移を修正した

昨日までで難しい処理は終わった。

もう完成したも同然。

なんて思ってたけど、

全然そんなことなかった。

エフェクトやUIも形にしただけだったから、全然雑だし。

個人的にはこれもシンプルで良いと思ってるけど、流石にシンプルすぎるか。

あと、オンラインで対戦するならランキング機能くらいは最低限必要になるだろうし。その辺は後々考えよう。

動きはするから今のままでリリースしても良いんだけど。

正直、今日誕生日だったんで、もうこのまま記念日的にリリースしたい気分ですらある。

設定画面とプライバシー表記UIなんかも作っていく。Doozyあるから少しは楽だ。

設定する項目は

  • カメラ移動の強さ
  • 音量

……、そんくらいしかない気がする。

プライバシーはホームページにプライバシー表記のページを作ってそこにリンクを張るだけにした。

広告処理もした。毎回やるのがいい加減面倒になってしまったのでアセットを使った。スムーズにいった。Il2CPPビルドも問題なくできた。

リワード広告を付けたが、ちょっと気になったのでgoogleのポリシーを調べると、

リワード広告を視聴する場合は見るかどうかの選択をユーザーが出来るようにしないといけないようだ。

今のところリワード広告をすれば次の戦いが出来るだけっていうことにしてるけど、次もプレイしたければ広告を見てねっていう選択もどうだろう。プレイしてもらわないと困るし。

報酬に出来るようなものが無いから最初は外して全画面だけにしておくかもしれない。報酬自体については特に調査していないと書いてあるが。

リワード広告を見て再びアプリに戻ると回線が切れている。

そのため、アプリに戻ったら次の戦いまで一気に進むようにサーバーの遷移を調整した。

広告を見たフラグ変数を持たせたが、ひたすらフラグを持つ変数が増えていく。

オンラインであればコールバックで接続状況を確認するしかなく、メソッドの順番が決まるのでそうするしか思いつかなかった。

より良い方法があるんだろうけど、早く作りたかったので思いついた方法で実装した。

次にやるときは最初からもっと上手く出来るといいが。

そういえばタイトルの正式名称を決めてなかった。

なんにしよう。

リアルタイムオセロでも良いけど、オンラインが出来るだけのオセロもリアルタイムってタイトル使ってて、普通のオセロと思われたら嫌だな。

何か感覚的に名付けてみようか。

ハンドルネームのげんとめから文字ってげんとめオセロとか。どんなゲームかも説明できるタイトルが一番良いんだけど中々思いつかない。

それと、ゲームの終了条件に石が全部一色になった場合を考えていなかった。

もう大体完成したかと思ったら把握していなかったことが、次から次に出てくる。

PCのスペックが低いから、繰り返して検証するのに時間がかかる。

スクリプトをコンパイルするのにいちいち時間かかるし、Editorの動作も思い。

つらい。

17日目:ビジュアル修正4

[update]機能修正

  • HUDのプレイヤー情報の色を自身の石の色と合わせるようにした
  • UIの画像を一新した
  • 石を置くときのエフェクトを修正した

[fix]不具合修正

  • ひっくり返している石がある間は石を置けないようにしていたつもりだったが出来ていなかった

最終調整だ。

最初は1週間くらいでリリースできる簡単なアプリにするつもりだったが、こんなにかかってしまった。

ただのオセロといえど、難しい。オンラインにしようとしたからというのもあるが。

1日9時間くらい作業していたから、150時間くらいかかったかも。

複雑なゲームでもないが、やっぱり時間かかった。

というか3Dでキャラが動き回るゲームとかの方がUnityの機能やアセットを使えるのでやりやすいかもしれない。どっちにしろ時間はかかるか。

オセロらしさはないがとりあえずUIを整えた。正直完璧とは言えないが、ともかくこれでいこう。

Spriteアトラスを使って圧縮もしたから、DrawCall(だっけ?)も減らせるはず。アプリの容量も減らせるはず。

オセロをひっくり返すエフェクトも一新した。

不具合がいくつか見つかる。

  • 石をひっくり返している間でも置けてしまう。
  • 石のカウントがあってなくて、0になってしまって途中勝ちになってしまうことがある。でも、これは石を置けない時間が生まれたらなくなる不具合かもしれない。

18日目:ビジュアル修正5

[add]新規追加

  • タイトルを決めた
  • サウンドを追加

[update]機能修正

  • Log出力を消す

タイトルは

リアルタイムオセロ

にした。

普通のオセロと思われるかもしれないけど、他に表すものが思いつかない。

何か良いのがあったらまた変えよう。

サウンドもとりあえず入れた。GameSynthを購入していたので使いたかったが、元になる素材がないとなかなか思ったものができない気がする。自分がパラメータの意味を理解していないからなんだけどもっ。

GooglePlayのストアに載せるプロモ用の素材もアップ済みだ。

……。

Debugの出力も、必要ないから消した。

…………。

これは、ひょっとして、

完成しているのでは!?

やっとできた……。

18日……。

ゲーム制作にとっては長い時間ではないし、むしろ短いんだけど、元々が1週間程度で作る予定のものだったので長く感じた。

すごく。

正直、まだ改良する余地は沢山ありまくる。

ランキング機能も付けてないし、細かいところに気に入らない要素もある。たくさん。

でもとりあえず公開できるところまでは到達した。

公開していいんだ。

というわけで、

完成しました!(最低限)

やったぁ!!!

そう思ってたら途中で石が0になるバグが出た。

これ以上無いぬか喜び。

やばい、結構このバグどこが悪いか分からない。

と思っていたが判明した。Initialize処理が、Startの時とオブジェクト作る時と2重にされていたのが原因だった。くそぉこんなんで。

いや、しかし、ダメっぽい。

公開できない。石の変化する管理を根元から考え直さないといけない。

まだ公開はできないぃぃ。

どうしてこんなことに。

19日目:不具合修正

[add]新規追加

  • シェア機能
  • Unity Analyticsを追加
  • レビューを促すUI
  • RemoteSettingsとかいうアプリを更新せずにゲーム内のパラメータを変更できるUnityのパッケージを導入

[fix]不具合修正

  • 石の加算処理が合わない
  • アニメーション中の石を管理するフラグがおかしい
  • ひっくり返している石がある間、石を置けないようにしていたが、ひっくり返し終わっても石を置けない

昨日は絶望を味わったが、寝たら気分切り替わった。

やはり睡眠は大事。

眠ることは全ての気持ちを解決してくれる。

気分を入れ替えることにした。

思い切って色々実装しよう。1日遅れるのも2日遅れるのも変わんないし。

ついでだからSNSで共有できるサービスも追加することにする。

EasyMobile使えば簡単に出来そうだし。

オンライン上で同じ位置に石が置かれた場合への対応もした。

4行追加するだけで済んだ。すでに石が置かれていれば何もしないという処理を追加するだけで済んだ。

問題は石を数える時の処理だ。

石がひっくり返るアニメーションを使っていて、そのアニメーションが終わったタイミングで石を加算している。

AnimationEventを呼ぶことで、メソッドを呼ぶタイミングを管理していたが、途中でアニメーションが終わってしまうと呼ばれないことがある。

そのせいで数が合わないことがあるようだった。

原因が分かれば解決したようなものだ。

オンラインだと非同期な処理になってしまう。

一つの処理(今回の場合は、ひっくり返すアニメーションが始まって終わるまで)の中で白石と黒石を参照する変数が途中で変わってしまっていて、処理が一貫していなかったことが原因だった。

非同期処理は難しい。

正直、そこまで複雑ではないオセロゲームでさえこんなに不具合が出る。

オンラインでアプリを作るならマルチスレッドについての考え方が必要な予感。

1から見直して不具合は解決した……はず。もう自信持てない。

コードがすごくスッキリした。

見返したら無駄な処理もいくつか見つかった。

消さない方が良かったかもしれないが、不具合も特に発生していないし、ただの勘違いだったんだと言い聞かせる。

どうして書いたかコメントを残して置かないと後から見直した時に消してしまう。

必要があるならコメント書いとかないと。

思いついたのでレビューを促す処理を入れようと思う。アプリを拡散するために出来ることはしておく。

Photonのサーバー代もかかるし。

あとUnityAnalyticsも仕込んでおこう。同意を得たりする処理が面倒ではあるけど。

しかし、プライバシーポリシー周り面倒すぎ。

よし。

レビュー画面とUnityAnalyticsのプライバシーポリシー画面も作った。GDPR対応だけど、日本でしか公開しないからする必要ないかもだけど。

UnityのRemoteSettingsとかいうのも導入してみることにした。

プレビュー版だけどバージョン1.xとかだしそれなりには動くだろう、きっと。

導入にアセットを使う必要があって、これにいきなりエラーが出たけど、簡単に直せるものだった。

しかし、まともに動かない。

何か間違っているんだろうか。プレビュー版だからちゃんと動かない? それにしたって基本的には動いてくれるだろうし。

色々やってたら気づいたが、RemoteSettingsとRemoteConfigSettingsをごっちゃにしていた。一緒のものと思っていたから設定したキーが取得できなかったようだ。

なんという間抜けなミス。

ていうか何でこんな同じようなサービスがあるのですかっ?

どちらも、アプリ自体をアップデートすることなくネット上でゲームの値を変更するという同じ機能だと思うんだけど……。

今日のまとめ:

審査にまで行けなかった。

20日目:リリース

[add]新規追加

  • リリース

[update]機能修正

  • Remote Configを使えるようになった
  • Remote Configで変わるパラメータが一致する端末とだけマッチするようにした

Remote Configがちゃんと使えた。

プレイ時間と、石を置ける間隔の時間をリモートで設定できるようにした。

中々手間取った。ドキュメントが英語だからっていうのもあるけど。

最初にFetchするときに構造体(空でもよい)も渡さないといけないっぽい。エラーにも何にもなんないから気づかんかった。

ともかく使えるようになったけど、

クッソ便利

なのでは?

プレビュー版だから何かと不具合も出てくるんだろうけど、パラメータをアプリを更新せずに変更できるってかなり強力なのでは?

ネットにつながってなかったら更新できないわけですけど。

ちなみにネットに繋がってない等で値を更新できなかったら、ちゃんと前回取得したパラメータがキャッシュされていた。

オンラインでするには、対戦相手がちゃんと同じパラメータになってないと困るから、そこを確認する処理を入れる必要はあるかな……。

使っていく時に何かと不便も出てくるかもしれない。

いつか、これは有料のサービスになるんだろうか。

それと、フォーラムでちらっと見たけど、RemoteConfigはRemoteSettingsの上位版という感じっぽい。いずれRemoteSettingsは廃止、統合される扱いのよう。おそらく。

しかし、もう20日目だけど、集中力が切れてきている感じがする。

もうとっとと公開したい。

完成したと思ったらしてなかったり、

色々あったけど……

今度こそ完成。

20日目にしてやっとできたか。

正直まだ、手を付けるべきところはある。

  • ランキング機能
  • パラメータ調整
  • ステージを追加
  • まだエフェクトを追加出来る箇所がある

でもとりあえずは公開しよう。


というわけでリリースしました。

オセロゲームですが、ターン制ではありません。 石は好きなだけ置けます。 石を置くと、次に石を置ける場所にマスが生成されます。 普通のオセロと共通しているのは、 ・石を挟んだら自分の石と同色になること ・石を置ける場所はオセロと同じようにひっくり返せる石がある場合のみ ・石の数が多いほうが勝つこと ・途中で相手の石を全...
  • 公開日:2020/04/22
  • 製作開始日:2020/04/02
  • 製作時間:180時間(だいたい)
  • ゲームエンジン:Unity

RemoteSettingsを見つけたのは収穫だった。

それとEasyMobileを初めて使ってみたがとても良かった。広告処理なんてのはゲームに関係ないところなので、手間をかけずに済むならそれに越したことはない。

同じ処理なので使いまわしたいし。

このアセットは前から持っていたんだけど、今回初めて使った。もっと早く使えばよかった。

積みアセットが増えてきてよくない。


オセロゲームを模した簡単なゲームだけど、中々苦労が絶えなかった。

普通のオセロと違ったものにしたいというのもあったし、オンライン対戦というのは予期していない例外が続々出てくる。

でも、気を付けることは分かった気がする。

次にオンラインゲームを作るときはもっとスムーズにいくだろう。

そうであってほしい。

出来ることは増えたと思いたい。

一つアプリを作ることに面白いゲームを作るためのステータスが上昇していると信じたい。

今回のアプリは20日という短い時間だったからかもしれないけど、作っていてずっと楽しめた。

色んな処理で詰まることがあったけど、実装を考えている間は夢中になれる。

どのアプリも実装を考えている間は楽しめるんだけど、後半、レベルデザインやUIを修正するところになると、急に億劫になってしまう。

でも今回は全部楽しくやれた。

まだ改良の余地があるのでしばらくはアップデートを続けていくけど、次のアプリも作りたい。

また短期間で作れるものが良いかな。数作って収入に結び付けたいし。


次はどんなものにしよう。