どうもどうも! EIEIです!
およそ3か月ぶりのUnity日記のお時間です!
今回は、前回のRPG作りの続き… は失踪することにして、音ゲーを作ります!
失踪する理由は後で書きます(苦笑)
ということで音ゲー作っちゃいます!
音ゲーの制作自体は、1か月前くらいにしていたのですが、日記書くこと忘れてました(笑)
頑張って思い出しながら書きます…!
どんな音ゲーを作るのかな♪
RPGから逃げた理由
まあまずRPGから逃げた理由なんですが、
RPGで使うマップの中の、道などの良い素材がネットで見つからなかったんですよね~
どれもこれも、RPGツクールってゲーム用の素材だったので、Unityで活用するのがほぼ無理でした…(涙)
僕は、プログラミングとゲームつくりがしたいからUnityを触っているのですが、
グラフィックとか、音だとか、そういう表層のものにはとにかく時間をかけたくない人なので、
素材を描くってことはしたくないのです…(笑)
それってめんどくさがった結果じゃないのかなぁ…
ただ、音ゲーなら素材が(妥協すれば)簡単なもので良いですからね!
しかも、1年前に僕が作った音ゲー(ゲームとは呼べない代物ですが)が残っているので、その素材を流用しちゃいます!
1年前に作ったのは、ゲーム開始したら急にノーツ(音符)が流れてくるものでした(笑)
いやでも、素材とかプログラムの一部を流用できるのは嬉しい!
上の画像が、1年前の僕の遺品です。
画面サイズの変更に対応していなかったので、モニターが変わった影響で表示が崩れていますね…
1年前の自分のツイート見るの、なんか別人っぽく見えて面白い…
この素材と、プログラムの一部を流用すれば、めんどくさい作業を一部飛ばして作れちゃいます!
とにかく飽きるのが早すぎて、やる気が持続しないEIEIさんにピッタリ。
音ゲーを作っていきます!
音ゲーの原理的なもの
ここではちょこっと、音ゲーをどうやってプログラムするか紹介しちゃいます。
文字が多くて興味ない人には辛いと思うので、興味なければ「音ゲーの基礎を完成させる!」まで飛ばしてくださいね~
音ゲーは、作るのが簡単そうですが、しっかり原理を理解しないと作りづらいんですよね… 多分。
音楽にはbpmという値が決まっていますよね。bpmはテンポのことで、音楽の速さを表す数字みたいなもんです。
なので、bpmが速い曲と遅い曲で、ノーツ(音符)が流れてくるタイミングが違います。
国歌の君が代がだいたいbpm60で、
「あるこ~、あるこ~」のさんぽがその倍のbpm120です。
さらに、今回は音ゲーによくある、次のオプションをつけたいので、そこも計算してノーツのタイミングを調節する必要があります…
- ノーツスピード(ノーツが流れる速さ)
- タイミング(ノーツのタイミングをずらす)
そこで、この辺を計算して! その計算はプログラマーが頑張って作るとして!(?)
ノーツを、上すぎて画面に映らない場所に出して、それを一定速度で落として譜面を再現します!
見えない場所に出しても、計算が合っていたら、ちゃんとリズム通りに譜面を作れるよ~
ここで、「ノーツを生成するプログラム」が必要になりますね。
そして、音ゲーと言えばタイミングの判定! ここを作るのは結構楽しみだったりするのですが、
タイミングの判定だったり、ノーツが勝手に落ちるプログラムは、各ノーツに別のプログラムを引っ付けます。
「ノーツを動かすためのプログラム」だね!
その中に、判定だったりいろいろ詰め込みます。
自分の中では、ここまでで割と簡潔に原理を書いたつもりですが、
書き終わってから読み返してみると何も簡潔じゃない…
けど、原理なんて長々と書いていてもしょうがないので、製作過程に入ります(苦笑)
音ゲーの基礎を完成させる!
とりあえず、1年前の遺産は画面サイズによって表示が崩れるので、それを直しました!
表示が崩れてしまうの、1年前は本当に初心者だったのがうかがえます…
僕がUnity… というか、コードを書くタイプのプログラミングを始めたの、1年ちょっと前だからね。
下の画像のように整えました! とりあえずテストで6つのノーツを出しています。
そして、1年前の遺産には最大級の欠陥があって、
プレイするパソコンのスペックによって、ノーツの速度が大幅に変わるんですよね…(汗)
もうとにかく、何もかも早くなってしまうので、
音ゲーが簡単に成立しなくなります…(笑)
ちょっと、それ直さないとゲーム作れないじゃん…
しかし、およそ1年間でEIEIさんはちょ~っとだけ、プログラミングの力をつけたので!
対処できるようになっています!
その対策とは、超わかりやすく言うと、fps(フレームレート)を無制限から固定にすること。
マイクラにもありますよね、fps。
イメージ的には、あの値を固定します!
そして、先ほど原理で長々と説明していた部分の、計算のプログラムを実際に組んでいきます。
下の画像を見てもらえれば分かる通り、結構めんどくさいことしてます…!
もちろん、計算のプログラムなんて割愛しますが、
結構頑張ったおかげで、理論上はbpm、ノーツスピードが正の値ならば、
どんな数字にしても成立する式を組むことができました! 理論上は!
これで、どんな曲でもゲームに取り込めば、プレイできるようになりました!
ただ、ノーツスピードは、極端な値にするとバグりやすかったり、そもそもプレイしづらいので、
設定できる範囲は2~10にしています(笑)
そして、個人的に音ゲー開発の一番楽しいところ、判定の作成です!
「何秒ずれていたらミス」みたいに決めるんだね!
とりあえず、この叩くだけの普通のノーツは、次のように判定を作ってみました!
判定 | スコアなど | 基準 |
---|---|---|
JUST | 1000点 | ±150ms |
GOOD | 700点 | ±400ms |
OK | 500点 | ±500ms |
MISS | 0点、コンポが途切れる | 上のやつ以外 |
判定を作って、判定後に画面に表示されている数字を変更するようにすれば、一気に音ゲーっぽくなりました!
そしてそして、ロングノーツと、ハードノーツ、そしてロングノーツの終点を実装しました!
ノーツは4種類あれば十分かな?
ロングノーツがあると、譜面の多様性が上がって良いね!
ハードノーツは、叩く直前にスペースキーも押さないといけないめんどくさい子です(笑)
ロングノーツは、ボタンを押し込む必要はなく、長押ししていても取れるやつですね!
終点は、ボタンを押し込む代わりにボタンを離すときに判定があるやつです。これだけちょっと判定緩め。
4種類も作ると大変… かと思いきや、なんとプログラムがほぼコピペです! コピペ最高!
落ちる速度とかは変わらないからね!
これで、音ゲーの基礎はできました!
まだ、タイトル画面やらリザルト画面がなかったりと、ゲームは成り立っていませんが…
その辺はこれから作るんだね!
ということで、譜面を読み込む機能を作ります!
個人的にこだわりポイント! 譜面を読み込む機能!
譜面… 音ゲーでのノーツの並び方のことなのですが、
これは何らかの方法でゲームに読み込ませる必要があります。
1年前は、プログラムに直接記述していたので、時間がかかりすぎて萎えてました(アホ)
プログラムに直接記述する方法、計算上は1曲作るだけでもマジで30時間とかかかります…
そこで、プログラムの外にあるtxtファイルを、譜面データとしてプログラムに読み込ませる方法を採用!
こんなことやったことなかったので、だいぶ時間はかかりましたが、実装できました♪
これなら、法則に従って何も考えずに、txtファイルを編集すれば譜面が作れるね!
これがかなりの革命で、曲を作るのに必要な時間が10分の1くらいになったんですよね!
おかげで、飽きっぽい僕でも譜面を作れます(笑)
さらに、ちょっとExcelで工夫してあげるだけで、まさかの譜面作成ツールが完成!
Excel君の活躍により、譜面作成時のミスが減ったほか、さらに所要時間を4分の1ほどに抑えることに成功。
1つ譜面を作るのに、大体4、50分しかかかりません!
…正直、こうして日記としてブログに書いているとすごく地味というか、分かりづらいのですが、
こんなに楽に、外部から譜面を入れられるって、EIEIさんの中では本当に革命なんです。うん。
音ゲーって、ある程度までプログラムを組めたら、
あとは曲の数を増やすだけだからね。
例えるならば、仕事で東京~大阪間を、いつも自転車で往復している人に、新幹線を教えてあげたレベルです。
なんだこの例え… 分かるけど分かりづらい。
マイクラで例えるなら、大量の丸石を石のツルハシで集めようとしている人に、
ビーコンと、エンチャントされたダイヤのツルハシをプレゼントするレベルです。
その他細かいバグ取り!
そして、先ほどの画像で気になった方がいるかもしれない、ロングノーツの長さがおかしい問題。
こちらも、ロングノーツの長さを計算するプログラムを実装して、解決しました!
試行錯誤で値を見つけたので、結構時間はかかりましたが、きれいになりましたね!
さらに、ロングノーツは必ず、他のノーツより下に表示されるようにしたので、
ロングノーツに隠れて他のノーツがやってくる、という最悪の事態はしっかり防いでいます(笑)
隠れたノーツとか飛んで来たら、初見じゃ絶対フルコンポできないからね…
そして、これはUnityという環境においては、仕方ないことなのですが、
どうしても処理をしている時間が積み重なって、ずれてしまうのですよね…
下の画像みたいに、一部だけずれることもあれば、
流れている曲から徐々に引き離されたりもします…
このラグを、自動修正するプログラムを書こう! …と思って、大体20時間くらい消し飛ばしました。
いくつか方法を試したけど、なかなか上手くいかなくて…
20時間って、このゲームを作るために使った時間の半分くらいなんだけど…
最終的に落ち着いたのが、曲が流れ始めたタイミングで、Unityが管理してくれている正確なタイマーを0にして、
ノーツを流すタイミングを、このタイマーの値を見て決めるようにしました!
これだと、体感できるラグは感じなかったので、
人間が気づけないぐらいのレベルの範囲で、自動修正してくれように!
…ちなみに、さっきから当たり前のように書いていますが、ちゃんと曲をスタートするプログラムも書きました。
もっと言うならば、リザルト画面とか、曲選択画面とか、オプション画面とかもつけました。
スクショを撮り忘れました!
なんで撮ってないんだ…
あんまり後撮りしすぎると、日記の意味が薄れてしまう上に、
1か月の時を経て、どこが何だかいまいち分からなくなってるんですよね(苦笑)
プログラマーとして、本来それはNGなんだけどねぇ。
ということで、一応完成のところまですっ飛ばします!
音ゲーが完成! 個人的に大満足の出来!
こうして音ゲーが完成しました!
一応1年前のものをリメイク… という形ではありましたが、いろいろなものが改良されすぎてもはや別物です(笑)
大雑把ですが、次のことをやりました!
成長した、自分!
- 譜面を外部から取り込むように
- パソコンのスペックやラグの影響をほぼ0に
- 曲や譜面を何種類も選べるように
- タイトル画面、リザルト画面、オプション機能
- 楽曲中のbpm変更、ポーズ機能
- その他もろもろ…
音ゲーとして、それなりに完成度が高くなりましたね!
これ、公開するのもありだな~ と感じたのですが、
公開するには1歩足りない感じがするので、もう少し修正したら公開できるかもしれません…
公開は、相当僕のモチベが音ゲーに傾かないと難しいかもしれません…(笑)
何だろう… 自分用とするなら120点なのに、世の中に出すなら50点みたいな…
(僕の通う高専、テストが60点未満が赤点だから、もう少し欲しい… って評価です…。)
ちなみに、ゲームが動いている様子は下のツイートの動画を見てもらえると分かりやすいと思います。
そして、失踪したRPGなのですが、でもなんやかんや作りたいと思っているので、
いい感じの素材を見つけたりしたら、再開したいと思っております!
せっかく前回、タイトル画面作ったからね(笑)
さてさて、今回は音ゲーを作る? リメイクする? 感じの日記でした!
正直、全部の内容を細かく書いていたら、尺がすごいことになるので、だいぶ端折って書いたのですが、
いかがでしたでしょうか?
春休みを使って、だいぶ頑張った分、なかなか日記書くのは難しかったです(笑)
それでは皆さん、バイバ~イ!
コメント
音ゲーは大好きです(*´∀`)♪
Unityって使いやすいですか?私もゲームとか作ってみたいけど、正直そういうの苦手なんですよね(;^∀^)……とか言ってもpc持ってませんけど!(T-T)。まあでもゲームはいつか作ってみたいですね!RPGゲームも、気が向いたらつくってほしいです!!
音ゲーの完成おめでとうございます!
RPGも見たいですけどね(笑)
ととの妹さんへ返信
一応、ゲームやコードが公開されていたら遊べますね!
なんなら、世の中のスマホゲームなども結構な割合でUnityで作られています。
僕はまだそのレベルに達していないので公開はしていませんが…
これは他の人が作ったものも、遊べるのですか?
統合版しか持っていない人さんへ返信
一応アセットストアも見てみたのですが、マップの素材はかなり少なかったです…(苦笑)
マップを使わないRPGにするか、自分で描くか… 悩みどころです。
自分の知っているUnityならアセットストアがあった気がするんですけどそこには良い感じのアセットはないんでしょうか?