ITエンジニアのための勉強会・イベントレポート情報メディア

Unityで作ろう!ゲームアルゴリズム(14)音ゲーのアルゴリズムを作ってみる その2(ツール作成編)
skill

Unityで作ろう!ゲームアルゴリズム(14)
音ゲーのアルゴリズムを作ってみる その2(ツール作成編)

2017.12.12

 
  • このエントリーをはてなブックマークに追加

読者のみなさまの中にも、ソシャゲなどにハマって長くプレイしている方はたくさんいらっしゃるかと思います。
ただ、ふとしたタイミングで「復刻イベントだの何だのコンテンツが水増しされていくだけで、無駄に時間がかかるようになってしまった」と感じている方も多いのではないでしょうか。(筆者は最近ひしひしと感じちゃっています)

コンテンツ水増しで食傷気味だけど、つぎ込んできた時間・お金・労力がもったいないので、ズルズル続けてしまう。
でもいずれ力尽き、やめてしまう。

この経験を何度も積み重ねていくと、いずれゲームをすること自体に虚しさを感じるようになってしまいそうで、ちょっと心配です。
せっかくスマホのお陰で老若男女問わずゲームの間口が広くなったのに、この影響で近い将来ゲーム離れが進んでしまうのではないかと。

そこで「ゲームを遊んで勉強にもなればみんなハッピーになるのではないか」と思ったりしている今日このごろです。

これまでも勉強を全面に押し出したちょっとおカタいゲーム(?)はありましたが、もっとゆるーく「純粋にゲームを楽しみながら、いつの間にかちょっとした勉強にもなっていた」という形が実現できれば、色んな方々に、今よりもっとゲームを好きになってもらえると思うんですよね。

さて、前置きはこのくらいにして本題に入りましょう。

前回は音ゲーを作るにあたって気をつけておくべき事柄について学びました。
今回からは実際に手を動かしていきましょう!

前回「Unityで作ろう!ゲームアルゴリズム(13)

賀好 昭仁

どんな音ゲーを作るか

前回ご説明した通り、音ゲーは特許絡みで「やってしまいがちだけどリスキーなコト」が色々あります。ただ、今回作成するサンプルプロジェクトは学習用ですので、特許侵害の疑いが出る段階まで作り込みません。

ですので、
・縦方向(上から下)に譜面(ノート)が流れる
・ノートにあわせてタイミング良くキーを押す
という、一番直感的でイメージがわきやすい形で進めてみることにしましょう。

注: 特許は「特許申請されている内容と比較して、すべての構成において相違の無い場合」に特許侵害と見なされます。ただし、仮に「大部分は同じだが一部だけ異なる」などの理由で特許侵害にあたらなかったとしても、訴訟に巻き込まれてしまうと大きな費用がかかります。リリースを目指す場合はできるだけリスクを負わないよう気をつけましょう。

Unityで再生できる音声ファイル

音ゲーには曲が必要です。
ということで、Unityで再生できる音声ファイルの種類を把握しておきましょう。

  • MPEG layer 3 .mp3
  • Ogg Vorbis .ogg
  • WAV .wav
  • AIFF .aiff / .aif
  • Ultimate Soundtracker モジュール .mod
  • Impulse Tracker モジュール .it
  • Scream Tracker モジュール .s3m
  • FastTracker 2 モジュール .xm

色々ありますが、よく使用するのはmp3/wavです。
あとはoggを見かけるくらいで、筆者は他のフォーマットを目にしたことがありません。(ざっと調べてみたところ、シーケンサーアプリのフォーマットのようです。音楽制作に関わられている方であれば馴染み深いのかもしれません)

ちなみに、今回はサンプルプロジェクト用に、macのGarageBandを使ってmp3の曲を作ってみました。素人の初打ち込みですので、生暖かい目で見ていただければ幸いです。(笑)
なお、音源は商用・改変・再配布、いずれも可とさせていただきます。やろうとする方はいらっしゃらないと思いますが、販売はご容赦くださいまし。

譜面データの作成ツールを作る

では、手を動かしていきましょう。

今回作ろうとしている音ゲーは「譜面(ノート)に合わせて、決められたタイミングでキーを押す」ゲームです。ということは、あらかじめ譜面を作成しておく必要があります。

「譜面の作成」と聞くと尻込みしてしまう方も居るかと思いますが、今回は予備知識なしで誰でも使える「自分の演奏をそのまま譜面化するツール」を作ってみましょう。
なお、本格的にやるのであれば、打ち込み(参考: https://ja.wikipedia.org/wiki/%E6%89%93%E3%81%A1%E8%BE%BC%E3%81%BF)で譜面を作成できるツールを作った方が、クオリティの面でも時間の面でも得をしそうです。(ツールの作成は大変だと思いますけれども、急がば回れというやつですね)

実装方法を考えてみる

「自分の演奏を楽譜化する」と言われても、ピンとこないかもしれません。

実はものすごく単純で、
・曲開始から何秒で
・どのキーを押したか
・どのくらいの時間押し続けたか

という情報を保存しておくだけでOKです!

Unityでは、曲開始からの秒数はAudioClipから取得でき、キー押下イベントはUpdate()メソッドにてInput.GetKeyDown()で取得できます。コレを保存しておけば良いだけですので、ラクショーですね。

つくってみた

ということで、ツールを作ってみました。

キーボードのZ・S・X・D・Cのキーを押すことで演奏できます。
RECボタンで演奏を録音後、再生が可能になります。

サンプルプロジェクトはこちらからどうぞ。
https://github.com/akako/gamealgorithm-music-game/releases/tag/for_algorithm14

余談: UnityでもMIDIを扱いたいなぁ、という話
読者のみなさまには、MIDIファイルをご存知の方もいらっしゃるのではないでしょうか。

MIDIファイルは「演奏データ」です。
あくまでも演奏データですので、音源(鳴らす音)はMIDIファイルとは別に準備する必要があります。(大抵はOSにMIDI音源が組み込まれています)

演奏データには「いつ、どの音を鳴らすか」の情報が含まれていますので、MIDIファイルがあれば譜面を作成する必要は無くなります。
音ゲーを作るのがグッと楽になりそうですね。

しかし、残念ながらUnityではMIDIファイルを読むことができません・・・。

C#のMIDIライブラリに少し手を加えればMIDIも扱えるようになる、という情報も見かけましたので、筆者も近々チャレンジしてみようかなと思っています。

まとめ

ちょっと寄り道になりましたが、今回は譜面データを作るための録音ツールを作りました。ただ、演奏をそのままデータ化していますので、タイミングのズレなどが気になるかと思います。
次回はこのツールに少し改良を加えると共に、譜面データを使ってゲームをプレイできるようにしてみましょう。

原稿: 賀好 昭仁
qnoteスマホアプリ開発チーム技術主任。PHP・Android・iOS・Unityなど複数のプラットフォームでの開発を行う。
しばしば7匹の先輩猫社員たちにイスを占領される。

Unityで作ろう!ゲームアルゴリズム(14)音ゲーのアルゴリズムを作ってみる その2(ツール作成編)

この記事はどうでしたか?

おすすめの記事

キャリアを考える

BACK TO TOP ∧

FOLLOW