スクメロを作ってみた (技術編 その1)
この記事は『スクールガールストライカーズ2 Advent Calendar 2019』 の12/22分の記事です。
UnityとC#でスクメロを作ってみた記録です。 今日は技術編 その1です。
- なぜ作った
- アプリ内で実現されていないことを実現するため
- 実装されていない楽曲を使ってみたり
- 背景で動画を流してみたり
- 勉強のため
- 仕事だけでなく普段からUnityを使いたいがネタが無いときは既存のアプリの真似をしていた
- 実際にリリースされたゲームを手元で作ってみることで自分ができること・できないことがわかる
- アプリ内で実現されていないことを実現するため
- 構成
プレイヤー (Unity製) |- UI用画像 |- ノート用画像 |- エフェクト |- 効果音 |- スクリプト |- 再生データセット |- 楽曲 |- 譜面データ |- 背景データ (画像・動画)
エディタ (WPF製) |- 譜面データ (XML形式) を出力
確かどこかのインタビューではUnityエディタ上で譜面データを作っているように書かれていたけど、自分は役割が分かれている方が好みなので今回はこんな構成になりました。 どちらが正解とかは特に無いと思います。
画像データや効果音はアプリを解析して抽出する方法もありますが、ちょっと危ないと思ったので今回は目コピで自作したり、フリー素材で似たものを探して使用しています。
- スクリプト
-
譜面用ノート
ノートはゲーム中にタップや長押しする場所を示すものです。実際のゲームではノートに対して人間が操作を行うのですが、今回はマウスやキーボードでの入力はできず、自動で入力を行うように処理を実装しました。なので譜面再生中は見守ることしかできません。
判定処理や入力処理の実装に時間がかかりそうだったためです。 -
オブジェクトプール
譜面再生中は処理落ちを避けるためにできるだけ処理負荷を減らしたかったので、譜面のノート関連のゲームオブジェクトはオブジェクトプールで管理することにしました。ゲームオブジェクトの生成や破棄は処理負荷が高そうだったので譜面再生開始前に必要なオブジェクトを一括で生成しています。
プロファイラーで計測して比較したわけではないのであまり正確ではないかもしれませんが、オブジェクトプールではゲームオブジェクトをその都度、生成・破棄する方式よりもメモリ使用量が増えるはずです。処理負荷とのトレードオフですね。
-
エディタでの譜面データ作成についても書きたかったのですが、思った以上に記事が長くなってしまったので次回に続くということで。