Unity日記#3 オリジナル音ゲーを作ってみる!

日常

 どうもどうも! EIEIです!

 およそ3か月ぶりのUnity日記のお時間です!

 今回は、前回のRPG作りの続き… は失踪することにして、音ゲーを作ります!

EIEI
EIEI

失踪する理由は後で書きます(苦笑)

ということで音ゲー作っちゃいます!

 音ゲーの制作自体は、1か月前くらいにしていたのですが、日記書くこと忘れてました(笑)

 頑張って思い出しながら書きます…!

マイン
マイン

どんな音ゲーを作るのかな♪

スポンサーリンク

RPGから逃げた理由

 まあまずRPGから逃げた理由なんですが、

 RPGで使うマップの中の、道などの良い素材がネットで見つからなかったんですよね~

EIEI
EIEI

どれもこれも、RPGツクールってゲーム用の素材だったので、Unityで活用するのがほぼ無理でした…(涙)

 僕は、プログラミングとゲームつくりがしたいからUnityを触っているのですが、

 グラフィックとか、音だとか、そういう表層のものにはとにかく時間をかけたくない人なので、

 素材を描くってことはしたくないのです…(笑)

マイン
マイン

それってめんどくさがった結果じゃないのかなぁ…

 ただ、音ゲーなら素材が(妥協すれば)簡単なもので良いですからね!

 しかも、1年前に僕が作った音ゲー(ゲームとは呼べない代物ですが)が残っているので、その素材を流用しちゃいます!

EIEI
EIEI

1年前に作ったのは、ゲーム開始したら急にノーツ(音符)が流れてくるものでした(笑)

マイン
マイン

いやでも、素材とかプログラムの一部を流用できるのは嬉しい!

↑1年前に作った音ゲー(のようなもの)の画像です!

 上の画像が、1年前の僕の遺品です。

 画面サイズの変更に対応していなかったので、モニターが変わった影響で表示が崩れていますね…

EIEI
EIEI

1年前の自分のツイート見るの、なんか別人っぽく見えて面白い…

↑1年前の遺品が動いている貴重な映像です!(?)

 この素材と、プログラムの一部を流用すれば、めんどくさい作業を一部飛ばして作れちゃいます!

 とにかく飽きるのが早すぎて、やる気が持続しないEIEIさんにピッタリ。

音ゲーを作っていきます!

音ゲーの原理的なもの

 ここではちょこっと、音ゲーをどうやってプログラムするか紹介しちゃいます。

 文字が多くて興味ない人には辛いと思うので、興味なければ「音ゲーの基礎を完成させる!」まで飛ばしてくださいね~

マイン
マイン

音ゲーは、作るのが簡単そうですが、しっかり原理を理解しないと作りづらいんですよね… 多分。

 音楽にはbpmという値が決まっていますよね。bpmはテンポのことで、音楽の速さを表す数字みたいなもんです。

 なので、bpmが速い曲と遅い曲で、ノーツ(音符)が流れてくるタイミングが違います。

EIEI
EIEI

国歌の君が代がだいたいbpm60で、

「あるこ~、あるこ~」のさんぽがその倍のbpm120です。

 さらに、今回は音ゲーによくある、次のオプションをつけたいので、そこも計算してノーツのタイミングを調節する必要があります…

  • ノーツスピード(ノーツが流れる速さ)
  • タイミング(ノーツのタイミングをずらす)

 そこで、この辺を計算して! その計算はプログラマーが頑張って作るとして!(?)

 ノーツを、上すぎて画面に映らない場所に出して、それを一定速度で落として譜面を再現します!

マイン
マイン

見えない場所に出しても、計算が合っていたら、ちゃんとリズム通りに譜面を作れるよ~

↑図が雑で申し訳ない… イメージ的にはこんな感じです。

 ここで、「ノーツを生成するプログラム」が必要になりますね。

 そして、音ゲーと言えばタイミングの判定! ここを作るのは結構楽しみだったりするのですが、

 タイミングの判定だったり、ノーツが勝手に落ちるプログラムは、各ノーツに別のプログラムを引っ付けます。

EIEI
EIEI

「ノーツを動かすためのプログラム」だね!

その中に、判定だったりいろいろ詰め込みます。

 自分の中では、ここまでで割と簡潔に原理を書いたつもりですが、

 書き終わってから読み返してみると何も簡潔じゃない…

 けど、原理なんて長々と書いていてもしょうがないので、製作過程に入ります(苦笑)

音ゲーの基礎を完成させる!

 とりあえず、1年前の遺産は画面サイズによって表示が崩れるので、それを直しました!

マイン
マイン

表示が崩れてしまうの、1年前は本当に初心者だったのがうかがえます…

EIEI
EIEI

僕がUnity… というか、コードを書くタイプのプログラミングを始めたの、1年ちょっと前だからね。

 下の画像のように整えました! とりあえずテストで6つのノーツを出しています。

↑スコアとか、コンボの表示をきちんとできるようになりました!

 そして、1年前の遺産には最大級の欠陥があって、

 プレイするパソコンのスペックによって、ノーツの速度が大幅に変わるんですよね…(汗)

EIEI
EIEI

もうとにかく、何もかも早くなってしまうので、

音ゲーが簡単に成立しなくなります…(笑)

マイン
マイン

ちょっと、それ直さないとゲーム作れないじゃん…

 しかし、およそ1年間でEIEIさんはちょ~っとだけ、プログラミングの力をつけたので!

 対処できるようになっています!

 その対策とは、超わかりやすく言うと、fps(フレームレート)を無制限から固定にすること。

EIEI
EIEI

マイクラにもありますよね、fps。

イメージ的には、あの値を固定します!

↑画像では、200fpsに固定しています。

 そして、先ほど原理で長々と説明していた部分の、計算のプログラムを実際に組んでいきます。

マイン
マイン

下の画像を見てもらえれば分かる通り、結構めんどくさいことしてます…!

↑音ゲーを製作してから1か月、もう僕も何書いてあるか分からなくなってます。

 もちろん、計算のプログラムなんて割愛しますが、

 結構頑張ったおかげで、理論上はbpm、ノーツスピードが正の値ならば、

 どんな数字にしても成立する式を組むことができました! 理論上は!

EIEI
EIEI

これで、どんな曲でもゲームに取り込めば、プレイできるようになりました!

 ただ、ノーツスピードは、極端な値にするとバグりやすかったり、そもそもプレイしづらいので、

 設定できる範囲は2~10にしています(笑)

 そして、個人的に音ゲー開発の一番楽しいところ、判定の作成です!

マイン
マイン

「何秒ずれていたらミス」みたいに決めるんだね!

 とりあえず、この叩くだけの普通のノーツは、次のように判定を作ってみました!

判定スコアなど基準
JUST1000点±150ms
GOOD700点±400ms
OK500点±500ms
MISS0点、コンポが途切れる上のやつ以外
↑ms(ミリ秒)は、1000ms = 1秒の単位ですよ~

 判定を作って、判定後に画面に表示されている数字を変更するようにすれば、一気に音ゲーっぽくなりました!

↑画像中央の謎の0は、後ほど使うために設置しているものです。

 そしてそして、ロングノーツと、ハードノーツ、そしてロングノーツの終点を実装しました!

EIEI
EIEI

ノーツは4種類あれば十分かな?

マイン
マイン

ロングノーツがあると、譜面の多様性が上がって良いね!

 ハードノーツは、叩く直前にスペースキーも押さないといけないめんどくさい子です(笑)

 ロングノーツは、ボタンを押し込む必要はなく、長押ししていても取れるやつですね!

 終点は、ボタンを押し込む代わりにボタンを離すときに判定があるやつです。これだけちょっと判定緩め。

↑4種類のノーツを実装! いい感じ!

 4種類も作ると大変… かと思いきや、なんとプログラムがほぼコピペです! コピペ最高!

EIEI
EIEI

落ちる速度とかは変わらないからね!

↑左から、終点ノーツ、通常ノーツ、ロングノーツを動かすためのプログラムです。遠目で見ると全部同じ。

 これで、音ゲーの基礎はできました!

 まだ、タイトル画面やらリザルト画面がなかったりと、ゲームは成り立っていませんが…

マイン
マイン

その辺はこれから作るんだね!

 ということで、譜面を読み込む機能を作ります!

個人的にこだわりポイント! 譜面を読み込む機能!

 譜面… 音ゲーでのノーツの並び方のことなのですが、

 これは何らかの方法でゲームに読み込ませる必要があります。

 1年前は、プログラムに直接記述していたので、時間がかかりすぎて萎えてました(アホ)

EIEI
EIEI

プログラムに直接記述する方法、計算上は1曲作るだけでもマジで30時間とかかかります…

 そこで、プログラムの外にあるtxtファイルを、譜面データとしてプログラムに読み込ませる方法を採用!

 こんなことやったことなかったので、だいぶ時間はかかりましたが、実装できました♪

マイン
マイン

これなら、法則に従って何も考えずに、txtファイルを編集すれば譜面が作れるね!

↑こんな感じに、カンマ区切りの譜面情報をtxtファイルにするだけで、ゲームに反映されるようにしました!

 これがかなりの革命で、曲を作るのに必要な時間が10分の1くらいになったんですよね!

EIEI
EIEI

おかげで、飽きっぽい僕でも譜面を作れます(笑)

 さらに、ちょっとExcelで工夫してあげるだけで、まさかの譜面作成ツールが完成!

 Excel君の活躍により、譜面作成時のミスが減ったほか、さらに所要時間を4分の1ほどに抑えることに成功。

マイン
マイン

1つ譜面を作るのに、大体4、50分しかかかりません!

↑表計算ソフトって、音ゲーのためにあるんですね!!(※多分違います)

 …正直、こうして日記としてブログに書いているとすごく地味というか、分かりづらいのですが、

 こんなに楽に、外部から譜面を入れられるって、EIEIさんの中では本当に革命なんです。うん。

EIEI
EIEI

音ゲーって、ある程度までプログラムを組めたら、

あとは曲の数を増やすだけだからね。

 例えるならば、仕事で東京~大阪間を、いつも自転車で往復している人に、新幹線を教えてあげたレベルです。

マイン
マイン

なんだこの例え… 分かるけど分かりづらい。

 マイクラで例えるなら、大量の丸石を石のツルハシで集めようとしている人に、

 ビーコンと、エンチャントされたダイヤのツルハシをプレゼントするレベルです。

その他細かいバグ取り!

 そして、先ほどの画像で気になった方がいるかもしれない、ロングノーツの長さがおかしい問題。

 こちらも、ロングノーツの長さを計算するプログラムを実装して、解決しました!

EIEI
EIEI

試行錯誤で値を見つけたので、結構時間はかかりましたが、きれいになりましたね!

↑やっぱりロングノーツはこうでなくっちゃ。

 さらに、ロングノーツは必ず、他のノーツより下に表示されるようにしたので、

 ロングノーツに隠れて他のノーツがやってくる、という最悪の事態はしっかり防いでいます(笑)

マイン
マイン

隠れたノーツとか飛んで来たら、初見じゃ絶対フルコンポできないからね…

 そして、これはUnityという環境においては、仕方ないことなのですが、

 どうしても処理をしている時間が積み重なって、ずれてしまうのですよね…

EIEI
EIEI

下の画像みたいに、一部だけずれることもあれば、

流れている曲から徐々に引き離されたりもします…

↑すべてのレーンに同じ譜面を適応しても、こんな感じにラグでずれちゃう。

 このラグを、自動修正するプログラムを書こう! …と思って、大体20時間くらい消し飛ばしました。

EIEI
EIEI

いくつか方法を試したけど、なかなか上手くいかなくて…

マイン
マイン

20時間って、このゲームを作るために使った時間の半分くらいなんだけど…

 最終的に落ち着いたのが、曲が流れ始めたタイミングで、Unityが管理してくれている正確なタイマーを0にして、

 ノーツを流すタイミングを、このタイマーの値を見て決めるようにしました!

EIEI
EIEI

これだと、体感できるラグは感じなかったので、

人間が気づけないぐらいのレベルの範囲で、自動修正してくれように!

 …ちなみに、さっきから当たり前のように書いていますが、ちゃんと曲をスタートするプログラムも書きました。

 もっと言うならば、リザルト画面とか、曲選択画面とか、オプション画面とかもつけました。

 スクショを撮り忘れました!

マイン
マイン

なんで撮ってないんだ…

 あんまり後撮りしすぎると、日記の意味が薄れてしまう上に、

 1か月の時を経て、どこが何だかいまいち分からなくなってるんですよね(苦笑)

EIEI
EIEI

プログラマーとして、本来それはNGなんだけどねぇ。

 ということで、一応完成のところまですっ飛ばします!

音ゲーが完成! 個人的に大満足の出来!

 こうして音ゲーが完成しました!

 一応1年前のものをリメイク… という形ではありましたが、いろいろなものが改良されすぎてもはや別物です(笑)

EIEI
EIEI

大雑把ですが、次のことをやりました!

成長した、自分!

  • 譜面を外部から取り込むように
  • パソコンのスペックやラグの影響をほぼ0に
  • 曲や譜面を何種類も選べるように
  • タイトル画面、リザルト画面、オプション機能
  • 楽曲中のbpm変更、ポーズ機能
  • その他もろもろ…
マイン
マイン

音ゲーとして、それなりに完成度が高くなりましたね!

 これ、公開するのもありだな~ と感じたのですが、

 公開するには1歩足りない感じがするので、もう少し修正したら公開できるかもしれません…

EIEI
EIEI

公開は、相当僕のモチベが音ゲーに傾かないと難しいかもしれません…(笑)

 何だろう… 自分用とするなら120点なのに、世の中に出すなら50点みたいな…

 (僕の通う高専、テストが60点未満が赤点だから、もう少し欲しい… って評価です…。)

 ちなみに、ゲームが動いている様子は下のツイートの動画を見てもらえると分かりやすいと思います。

↑音ゲーらしくなりました♪ 大満足!

 そして、失踪したRPGなのですが、でもなんやかんや作りたいと思っているので、

 いい感じの素材を見つけたりしたら、再開したいと思っております!

マイン
マイン

せっかく前回、タイトル画面作ったからね(笑)

 さてさて、今回は音ゲーを作る? リメイクする? 感じの日記でした!

 正直、全部の内容を細かく書いていたら、尺がすごいことになるので、だいぶ端折って書いたのですが、

 いかがでしたでしょうか?

EIEI
EIEI

春休みを使って、だいぶ頑張った分、なかなか日記書くのは難しかったです(笑)

 それでは皆さん、バイバ~イ!

最後まで読んでいただき、ありがとうございます!

日常
スポンサーリンク
EIEIをフォローする
高専生ののんびりブログ

コメント

  1. EIEI より:

    るるらさんへ返信
    僕も音ゲーはちょくちょくプレイするジャンルですね~
    Unityは、基本英語なのが初めてだと多少辛いかもしれませんが、
    ネットで調べればわかりやすい記事がたくさん出てくるので、真似して作ると失敗しづらいと思いますよ!
    RPGも諦めずに頑張りたいと思います…!

  2. EIEI より:

    にしゃくさんへ返信
    ありがとうございます♪
    RPGも機会があれば頑張って作ろうと思います…!

タイトルとURLをコピーしました