Contents
【MIDI Animation Track】関連の動画内で表示されるコード
サムネイルをクリックすると、Youtubeの動画ページに移動します。
#2:音楽と同期したアニメーションを作ってみる
manifest.json
{
"scopedRegistries": [
{
"name": "Keijiro",
"url": "https://registry.npmjs.com",
"scopes": [ "jp.keijiro" ]
}
],
"dependencies": {
"jp.keijiro.klak.timeline.midi": "1.0.5",
...
#3:音楽に合わせてオブジェクトを生成してみる
ノートを生成
// 生成するノート(1)
[SerializeField] GameObject noteRed;
// 生成するノート(2)
[SerializeField] GameObject noteYel;
public void NoteOnC()
{
// C(ド)の音でノートを生成
Instantiate(noteRed, new Vector2(7, 3), transform.rotation);
}
public void NoteOnD()
{
// D(レ)の音でノートを生成
Instantiate(noteYel, new Vector2(7, 2), transform.rotation);
}
ノートの移動と削除
// ノートの移動速度
[SerializeField] float speed;
void Update()
{
// 左に移動
transform.position += Vector3.left * speed * Time.deltaTime;
}
void OnTriggerExit2D(Collider2D col)
{
// 判定ラインを通過したら
if (col.CompareTag("Judge"))
{
// 爆発エフェクト
// Explosion();
// 削除
Destroy(gameObject);
}
}
#5:ランダム要素の追加
ランダムに敵弾を選択
// 敵弾
[SerializeField] GameObject[] bullets;
void Shot()
{
// 配列の中からランダムに選択する
int index = Random.Range(0, bullets.Length);
// 乱数で選ばれた敵弾を生成
Instantiate(bullets[index], transform.position, Quaternion.identity);
}
void Initialize()
{
// 現在時刻のミリ秒でシード値を設定
Random.InitState(DateTime.Now.Millisecond);
}
配列のシャッフル
// 生成するノート
[SerializeField] GameObject noteRed;
// 敵ユニットの生成位置
Vector2[] array = new [] {new Vector2(7, 3), new Vector2(7, 2), ... };
void Start()
{
// 並べ替えを実行
Shuffle(array);
}
// 配列(Vector2型)のシャッフル
void Shuffle (Vector2[] deck)
{
for (int i = 0; i < deck.Length; i++)
{
var temp = deck[i];
int randomIndex = Random.Range(i, deck.Length);
deck[i] = deck[randomIndex];
deck[randomIndex] = temp;
}
}
public void NoteOnC()
{
// シャッフル後の配列で敵ユニットを生成
Instantiate(noteRed, array[0], transform.rotation);
}