【Unity】セガサターンのCD再生画面を再現する - その2
セガサターンのメニュー画面でCD再生している時のキューブの動きを再現していきます。
今回は「変色」「拡大」「回転」の3つを一気に実装します。
前回はこちら。 amayoshitqs.hatenablog.com
拡大縮小
今回は1倍~2倍という倍率で拡大することにします。
まずメンバ変数がこちら。
Vector3 originalScale;
開始時のScaleを保存しておく変数を定義しておきます。
続いてStart()メソッド。
void Start()
{
originalScale = skinnedMeshRenderer.transform.localScale;
}
ここでoriginalScaleに保存しています。
お次はSliderで参照しているOnChangeValue()メソッド。
public void OnChangeValue(float value) { skinnedMeshRenderer.transform.localScale = originalScale * (value / 100 + 1); }
モデルの拡大縮小を行うところです。
originalScaleを基準に1倍~2倍の拡大をしています。
これで前回と同じようにSliderを動かせば、球体化に合わせて拡大縮小するようになっているはずです。
その確認は各々に任せて次に行きます。
変色(緑色 -> 赤色)
RGBのRを増やし、Gを減らすイメージでいきましょう。
まずStart()メソッドで初期状態を緑色に設定します。
void Start() { skinnedMeshRenderer.material.color = new Color(0, 1, 0, 1); }
簡単ですね。
お次は実際に変色させている部分です。
public void OnChangeValue(float value) { var temp = value / 50; skinnedMeshRenderer.material.color = new Color(Mathf.Clamp(temp, 0.0f, 1.0f), Mathf.Clamp(2-temp, 0.0f, 1.0f), 0, 1); }
ちょっとややこしいのですが、サターンの画面見ながら組んでたらこうなりました。
Sliderの50%までに赤色を満タンにし、それ以降は緑色を0にしていく、という感じです。
これで「緑色 -> 黄色 -> 赤色」というような変色を行うはずです。
変色具合に違和感があればお好みで弄っていただければと思います。
確認は例によって各々に任せて次行きましょう。
回転
曲の再生中にモデルをグルグルと回転させます。
今回はコルーチンを使用するため、まずusingを行いましょう。
using System.Collections;
そしてコルーチンを定義します。
IEnumerator Rotate() { var count = 0; var x = 0.0f; var y = 0.0f; var z = 0.0f; while(true) { if(count <= 0) { x = Random.Range(0.0f, 5f); y = Random.Range(0.0f, 5f); z = Random.Range(0.0f, 5f); count = 150; } else { skinnedMeshRenderer.transform.Rotate(x, y, z); count--; yield return null; } } }
ざっくり言うと、一定間隔(150フレーム = 約2.5秒)でランダムな方向に回転を行うように作ってみました。
もうちょいスマートな作り方があったら是非教えてください、大分不満あるので。
で、これをStart()メソッドでコールしてあげましょう。
void Start()
{
StartCoroutine(Rotate());
}
これだけです。
セガサターンでは再生中はランダム回転、未再生中は一定の方向にゆっくり回転、という挙動をとっていますが、
現状はずっとランダム回転にしています、サウンドで操作するようになるまでは一旦これで。
完成
こんな感じで無尽蔵に回転しているモデルがあり、Sliderを動かせば変色と拡大が確認できると思います。
今回はここまでとなります。
やはり色と動きが付くとイメージ的にグッと近づきますね。
あとはSliderではなく音の強弱でOnChangeValueを動かせば完成ですかね。
一旦まず音の強弱だけで完成させ、そのアレンジでサターンに合わせて左右の音を分けて取得できるようにするなどしたいですね~。