「りばーしにゃいーぱー」とは
リバーシとマインスイーパーを混ぜたゲームです。
『オセロ』は株式会社メガハウスの登録商標なのでリバーシと呼んでいます。
なぜ作ったか
人口の多いリバーシとマインスイーパーを使うことで、ユーザーの獲得を目論んだ。
開発環境
Unity2020.3.2f1
VisualStudio2019
PlayFab
Photon
使用アセット
- GitHub for Unity
- PUN2
- TextMeshPro
- GUI PRO Kit - Simple Casual
参考にしたサイト
その他途中メモにて記載
日記本編
1日目(2022/01/27)
進捗
- PUN2でクリックしたら2人で同期オブジェクト交互に生成出来るようになった
2日目
進捗
- オセロマス自身が自分のstetusに合わせて動的に色が変わるようになった
3日目
進捗
- 理論上は置ける場所の判定と、実際に置くことが出来るようになった
- rayが働いていないことが分かった
- 見た目はリバーシになった
- オセロマスに画像と数字を重ねた(親:image、子:textMeshPro)
メモ
byte型→string型:(byte型変数).ToString()
4日目
進捗
- オセロマスをuGUIからSpriteに移行した
- オセロマスをクリックで検知することができるようになった
メモ
- Vector2IntというVector2のInt型があるのを教えてもらった
- uGUIにRayを反応させようとすると処理を追加しないといけないらしい
- 毎フレームアニメーションする物体にはuGUIを使用しない方がいい(最適化の観点)
- UIと思ったらuGUI、他はSprite
- パーティクル載せたいならSprite
- uGUIは3D表現は相性が悪い
- uGUIも2D空間に存在している(Wireframeを選ぶと分かりやすい)
- UIの中のTextを使うとCanvas必須、TextMeshを使うと逃げられる
- uGUIの1unitは1pixwl、3D空間の1unitは1m
- Colider2Dを使用してるとRaycastも2Dにしないと検知できない
5日目
進捗
- オンライン対応リバーシになった
メモ
- ゲームサーバーに入るのに失敗した時のコールバックはアプリでオフラインで開いたときに使われそう
- セーブデータ保存にjsonが便利そう
6日目
進捗
- 置けるところの色を変えた
- 置けない時のパス処理を追加した
- 終了処理を追加した
メモ
- 頭の中で考えてるのと紙に書いてみないとごちゃごちゃになり始めた
7,8日目
進捗
- 画面遷移のやつ書いた
9日目
進捗
- マッチングフェーズができた
- お互いに爆弾を置くフェーズができた
- 爆弾を上限まで置けなかった時ランダムで置く処理が必要
- 爆弾を送受信する関数がエラーを起こしている
メモ
- 最初,石が置ける場所全部に爆弾置いたらルールが破城することに気づいた(修正済み)
- []は配列であってリストではない
10日目
進捗
- 爆弾の送受信を除いてマッチング→爆弾設置→ゲーム開始のフェーズができた
メモ
- 同一のスクリプトファイルを複数のオブジェクトにアタッチすると、その数だけStart関数が呼び出される(今回はネットワークオブジェクト2つについているから2回呼ばれた)
- 上記の対策というか、基本ネットワークオブジェクト作るならphotonView.IsMineがないと複数回呼ばれる羽目になる
- photonView.IsMine君、もっと早く出会いたかった(サンプルコードの読み落とし)
- 爆弾が置けるのは周囲2マスにしないと2手目で後手が負けることに気づいた(修正済み)
- 爆弾の送受信にリストを使ってたけど非対応だったことが発覚、それでエラー吐かれていたみたい
11日目
進捗
- 爆弾の送受信ができた
- 基本の部分が完成した
- 爆弾の個数を5から3に変更
- 簡易的なタイトルを作成
- UI周りを作成し始めた
メモ
- 爆発した爆弾がなんかしらで消えることが発覚(原因は特定できていない)(修正済み)
- 設置した爆弾はゲームが開始したら見えなくなるのに何故か見えてしまうことがある(見えなくしてから設置できている可能性微レ存)(修正済み)
- 爆弾の個数が多い(修正済み)
12日目
進捗
- オセロマスの見た目を色変更ではなくSprite変更に変えた
- オセロ盤を設置
メモ
- 下画像はエラーが起きてて爆弾が3つしか置けていない(修正済み)
13日目
進捗
- リファクタリングしたら爆弾の設置・送受信が壊れていたことが発覚、修正
- 爆弾設置時間をUIに反映させた
- 必要な画像などをスプレッドシートに整理した
メモ
- GameObject.Find()を20回ぐらい使ってるからFindWithTagに変更
- スクリプトの細分化が出来ない、以前よりは出来てるけどSOLID原則とやらは全然満たせていない
なんか練習サイトとか無いのかな - オセロマスカウントの同期、UI変更が出来ない原因はわかってるけど、どうやってやればいいのか考察中
14日目(2022/02/21)
進捗
- 石を置いたらルーム内全員のコマ数が更新されるようにした
- 爆弾設置可能個数が分かるようにした
- UIをいじるスクリプトを変更した
- どっちのターンなのか分かるようにした
- 仮リザルト画面を設置した
- 爆発した所が何故か上書きされる問題を修正した
- おそらくα版(?)は完成した!!!めでたい!
- unityroomの公開範囲を限定から全体に変更
メモ
- PlayFabやらNCMBを使うと色々実装できるらしいことが分かった
- NCMB:簡単に気軽にできるよ! PlayFab:ゲームに特化してるよ!
っていう印象持った - クライアント側でレート計算するとチートされやすいらしい
- バックエンドは組み合わせ可能
- 「バックエンドは無理ー興味ないー」って思ったのに気づいたら片足突っ込んでた
- 開発者、知見を得る度に尊敬する
- GameServerServicesはあまり情報が出ないらしい
- public staticを使えばもっとスクリプト分割とかできそうだなって思った
- カスタムプロパティはちょっと変更があるみたい
15日目
進捗
- ねこじょーかーさんのPlayFab入門本読み終わりました
- コピペして使えるPlayFabのソースコードをまとめた
- りばーしにゃいーぱーにPlayFabを組みこみ始めた
- 匿名ログイン
- ユーザー表示名登録
メモ
- なぜかPhotonのマッチング機能が死んでいる(修正済み)
- シーン遷移の内容を変えたせいで、マッチングキャンセルでタイトルまで戻ってしまう(修正済み)
- 理論上はできているのに全て新規プレイヤーになってしまう(修正済み)
16日目
進捗
- 寝て起きたら新規プレイヤーの処理が直っていた
- ホーム画面のUI配置
- PlayFabからの情報取得
- レート・ランキングの初期化(なぜかできていない)
- 貨幣(ゴールド)追加(PlayFab側)
- ランキング追加(PlayFab側)
- ショップ・ランキング・設定の画面遷移
- キャラをタップするとセリフ出力
メモ
- C#本買います
- セリフが一定時間が消えるように教えてもらったasyncを使う
- TextにEventTriggerをつけても効果がない…
17日目
進捗
- ランキングのスクロール
- ランキングの取得
- ランキングをUIに反映
- Playfabのデータ処理を修正(データ取得してからシーン遷移)
メモ
- get,setが便利なのが少しずつ感じ始めた
- 別のスクリプトの変数を使うのはプロパティが一番よさそう
- コールバック地獄ってそういうことね…ネスト深いわ…
- ソシャゲとかでNowLodingみたいな画面があるの理解した。データ取得に少し時間かかる
18日目
進捗
- Photonのエラー修正(Prefabのパスや場所が変わっていた)
- ログイン時ネーム・レート・ゴールド取得
- 上記のUI反映
- 勝敗数をプレイヤーデータに追加
- NowLoading画面を仮設置
メモ
- フォルダサイズが大きすぎてGitHubにPush出来ない
- なぜか周囲のランキングは自身も含まれるのにTOP10には含まれない
19日目
進捗
- ゲームシーンのTextをTMPに差し替え
- マッチングバグ修正
20日目
進捗
- ランキングをボタン押すタイミングで取得するように修正
- ランキングで自分が含まれないバグを修正
- プロフィール欄が表示されないバグを修正
- プロフィール欄のネーム・レートを変更
- 降参機能を実装
メモ
- スコア送信から2s程待たないとランキングに反映されないらしい
- 過去の自分の命名の仕方と今の命名の仕方が変わってしまっている(以前「text + 内容」、今「内容 + Text」)
- if文の書き方も変わってた(以前「if ()」、今「if()」)
- スクリプトからボタンのOnClickの内容を追加できるみたい
- GameObject.Findだと非アクティブオブジェクトは検索されないみたいTransform.Findならいけるっぽい
- どっちが降参したのかを反映させる
21, 22日目
進捗
- 全てのシーンにおいてUIの差し替え中
メモ
- 有料アセットってすごい(小並感)
- TapToStartした後に名前を入力せずに終わると、次回ログインできなくなるバグ
23日目
進捗
- ショップのパネルを微調整
- PlayFabからカタログ・ストアデータを取得
- データを元にPrefab生成
メモ
- Json君と馴れ合う
- 実機テストやってみたら修正点が多く見つかった
- 録画したものを見ながら修正する
24日目
進捗
- 実機テストの際の修正点を修正
25日目
進捗
- ショップのアイコンが全部同じになるバグを修正
メモ
- カスタムデータのキーとクラスのプロパティ(?)は同じにしないと取得してくれない
- 取得しないと0を返すみたい
- デバック機能の為にクライアントから色々取得できるようにした(未来の私修正よろしく)
26日目
進捗
- ユーザー名変更機能
- 所持しているアイコンを取得
メモ
- アイコン購入の時にカスタムデータを付与
余談
お世話になった・なっている方
- Unityゲーム開発者ギルドの方々
この場をお借りして、いつもありがとうございます。