LemonteaのUnity部屋

LemonteaのUnity部屋

Unityの使い方とかです~

Unity 音ゲーの譜面をJsonUtilityで作成

こんにちは。レモンティーです。

今日は音ゲー記事の続きです。
前回↓説明したJson形式でファイルを読み書きする方法を使い、
sawalemounity.hatenablog.com

自分の好きなタイミングで好きな種類の音符を流すように
楽譜をつくってみたいと思います。

もしかしたら曲から音符のタイミングをとってこれたり
するのかもしれませんが、今回はタイミングは自分しだいです。

前回のこれですね
f:id:sawalemontea:20170922120424p:plain


やり方は
・記録用の変数を用意
・曲を流しながら時間をカウント
・任意のタイミングでボタンを押し、
 そのタイミングとボタンの種類を用意した変数に記録
・記録をJson形式で書き出して楽譜完成

というものです。

さっそくやってみます。


・記録用の変数を用意

前回説明したような感じで記録用の変数をつくります
Unity Json形式とファイルへの書き出し・読み込み - LemonteaのUnity部屋

今回はこんな感じ。
using System が要ります

[Serializable]
public class MakeNote
{
   public float[] MusicScore;
   public int[] NoteKind;
}

・曲を流しながら時間をカウント

これは普通にTimecountという変数を作ってUpdate内に

TimeCount += Time.deltaTime;

と書きました。


・任意タイミングでボタンを押し、
 そのタイミングとボタンの種類を用意した変数に記録

シーンに音符の種類分のボタンをつくります
この例では、ノーマル・長押し・フリックみたいな
3種類の場合です。

それにセーブボタンもつけます
f:id:sawalemontea:20170924114324p:plain

スクリプトでは

MakeNote mk = new MakeNote();

としてインスタンスをつくり
適当に配列を要素数1とかで初期化します。

そしてボタンを押した時に

        mk.NoteKind[i] = n;
        mk.MusicScore[i] = TimeCount;

こんな感じで記録します。
あとはiを+1し、配列の要素数を増やせばOKです
(iは最初0で、ボタンを押すと1増やす変数)

素数を増やすには↓を使います

Array.Resize(ref 配列, 増加後の要素数);


・記録をJson形式で書き出して楽譜完成

最後に、mkの変数の内容を記録します。
Saveボタンが押されたときに呼び出すメソッドで

 string json = JsonUtility.ToJson(mk);
        File.WriteAllText(FilePath, json);

こんな感じで記録します。
ファイルの書き出しには
using System.IO が要ります。

これで簡易的ですが楽譜は完成です。
もっといいやり方あったら教えてくださいщ(゜д゜щ)

今回はこれでおしまいです


関連
音楽の再生関連
sawalemounity.hatenablog.com
sawalemounity.hatenablog.com