clusterのワールドで花火のアセットKTK Fireworks Effects Volume1の音が鳴らない問題を解決する

わびさびさんノート

Unity アセット真夏のアドベントカレンダー 2020 Summer!

2020年08月18日

わびさび
こんにちは、フリーソフトの作者などを趣味でやっている「わびさび@WabisabiApp」です。 Unity アセット真夏のアドベントカレンダー 2020 Summer! 08月18日の記事になります。

夏といえば花火のアセットです!

KTK Fireworks Effects Volume1

KTK Fireworks Effects Volume1の特徴

  • 花火のアセットです。
  • とにかく花火が綺麗です。
  • 28種類の様々な花火が用意されています。(Ver2.0でさらに18種類追加!!)
  • 花火の表示だけでは無く、発射時の発射音や爆発音も含まれています。
  • prefabを置くだけで簡単に設置できる
  • これだけ入ってお値段たったの10$です!!
  • VRChatclusterのワールドでも使用可能です。

clusterのワールドでもKTK Fireworks Effects Volume1を使いまくりたい

最近どんどん進化していっている、バーチャルのSNSサービスのclusterのワールドでも花火を使いたい!!

Cluster Creator Kitで設置してみた。

いい感じで簡単に組み込めました。プレビューで音も鳴っているのでバッチリです。

ワールドをアップロードしてみた

よし、うまくアップロードできて花火も表示されたぞ!!

あれ!?。音が鳴らなくなってる?

昨年にも「KTK Fireworks Effects Volume1」 を紹介させていただきましたが、その時はclusterのワールドで使用しても音が鳴っていたのですが、最近の「Cluster Creator Kit」では音が鳴らなくなっていました。

今回は、clusterのワールドで使用した際に音が鳴らない問題の解決方法を紹介します。

なんで???

clusterのワールドではスクリプトが基本的に動作しないようになっています。オブジェクトにスクリプトをアタッチしていた場合、 参照は残るようですが、スクリプト(.cs)ファイル自体がアップロードもされないそうなので全く動作しません。

KTK Fireworks Effects Volume1」 のPrefabを見てみると、"Sound Play Time(Script)"というスクリプトで音声再生が行われていました。

スクリプトで音を鳴らしていた

clusterで使おうと思って購入したのにー

せっかく音声まで含んでくれているアセットなのに音が鳴らないのは少し残念です。
(´;ω;`)ウッ…。

ではスクリプトで何をしているのか?

スクリプトで何をしているのか

調べてみると以下の4つを行っているだけでした。

  1. ループさせるか決める
  2. 指定時間後に音を鳴らす(A)
  3. 指定時間待ってから鳴らす(B) ← ループする場合はだけ
  4. (3)の繰り返し

ありがたい事に、スクリプトではそこまで難しい事はやっていませんでした。

回数 音を出すタイミング
1回目 (A)秒待ってから鳴らす
2回目 (B)秒待ってから鳴らす
3回目 (B)秒待ってから鳴らす
4回目 (B)秒待ってから鳴らす

とこんな感じです。

指定時間後のパラメータ(A)は最初の1回目だけ使われていて、2回目以降は(B)の時間のみが使われてました。

あれ!?。Animatorでできるんじやない?

Animationをprefabに追加

Animationを追加
何でも良いのですが"Eff_FireWorks_00_loop(Prefab)"に作成したアニメーションを追加していってみます。

"Eff_FireWorks_00_loop/se_shot"にAnimatorを作成

Animatorを作成
「Eff_FireWorks_00_loop/se_shot」にAnimationを追加します。se_shotはwaitTimeが0なので、 Animationは1つだけです。

"Eff_FireWorks_00_loop/se_burst1"にAnimatorを作成

Animatorを作成
「Eff_FireWorks_00_loop/se_burst1」にAnimationを追加します。se_burst1はwaitTimeが2.5秒の後で2秒のループに入るので Animationを2つ作成して繋いでおきます。

2つのアニメーションは連続するように接続しておきます。

Animatorを作成
こんな感じで1つ目のアニメーションが終わったら直ぐに2つ目のアニメーションに遷移させます。

2つ目のアニメーションはループするように設定しておきます。

Animatorを作成
以下のような感じでループするようにします。

  • Loop Time ← on
  • Loop Pose ← on
  • Cycle Offset ← 0

"se_burst2と3"にAnimatorを作成

「Eff_FireWorks_00_loop/se_burst2」と「Eff_FireWorks_00_loop/se_burst3」は「Eff_FireWorks_00_loop/se_burst1」と同様に追加します。

こんな感じの構成にします。

Eff_FireWorks_00_loop
   |- oneShot1
   |- se_shot
   |     |- se_shot                         ← Animator(Controler)
   |          |- Animation(se_brust2)       ← Animation
   |
   |- se_brust1
   |    |- se_brust1                        ← Animator(Controler)
   |         |- Animation(se_brust1)        ← Animation
   |         |- Animation(se_brust1 - loop) ← Animation
   |
   |- se_brust2
   |    |- se_brust2                        ← Animator(Controler)
   |         |- Animation(se_brust2)        ← Animation
   |         |- Animation(se_brust2 - loop) ← Animation
   |
   |- se_brust3
        |- se_brust3                        ← Animator(Controler)
             |- Animation(se_brust2)        ← Animation
             |- Animation(se_brust2 - loop) ← Animation

se_shotだけ単純なループなので1種類、それ以外は2種類用意します。

Value Name se_shot se_brust1 se_brust2 se_brust3
waitTime 0秒 2.5秒 2.7秒 2.9秒
loop Wait Time 2秒 2秒 2秒 2秒

Animationを設定していきます

Animationを作成
「Ctrl」 + 「6」キーを押すとAnimationのウインドウが開きます。

"se_brust1"を例として説明していきます

"Animation(se_brust1)"のアニメーションを作成

"Add Property"で"Animation(se_brust1)"に「Audio Source」→「Enabled」と「Play On Awake」を追加していきます。

  • "Enable"はそのアニメーションソースが有効か無効かを制御します。
  • "Play On Awake"は"Enable"時に即時に音声を再生するかを制御します。

Animationを作成
"se_brust1"はwaitTimeが2.5秒、loop Wait Timeが2秒なので、以下のようにKeyを追加していきます。

Property 0秒(0) 2.5秒(150) 4.5秒(270)
Audio Source.Enable 0 1 0
Audio Source.Play On Awake 1 1 0

Propertyの数値はフレーム番号です。(フレームレートが60フレームの場合は、2.5秒は 60 x 2.5 = 150となります。) これで、2.5秒でEnableが1になる事で音がなり、2秒間待機します。

"Animation(se_brust1 - loop)"のアニメーションを作成

"Add Property"で"Animation(se_brust1 - loop)"に「Audio Source」→「Enabled」と「Play On Awake」を追加していきます。

Animationを作成
loop Wait Timeが2秒なので、以下のようにKeyを追加していきます。

Property 0秒(0) 0.083秒(5) 2秒(120)
Audio Source.Enable 0 1 0
Audio Source.Play On Awake 1 1 0

これで、0.083秒でEnableが1になる事で音がなり、2秒後にEnableが0になります。これをループさせる事で以下の表のような2回目以降の音を出します。 (0のタイミングで、Enableにを1にするとうまく音がならなかったので、5のタイミングで鳴らすようにしました。 → どうして?)

この2つのアニメーションが連続する事で以下を実現します。

回数 音を出すタイミング
1回目 (A)秒待ってから鳴らす
2回目 (B)秒待ってから鳴らす
3回目 (B)秒待ってから鳴らす
4回目 (B)秒待ってから鳴らす

他のAnimationを設定していきます

先に説明した"se_brust1"と同じように、以下を設定していきます。

  1. se_shot
    これは"waitTime"が0なのでアニメーションは1つだけをループさせるように設定します。
  2. se_brust2
    se_brust1と時間が違うだけなので、se_brust1と同じように設定してください。
  3. se_brust3
    se_brust1と時間が違うだけなので、se_brust1と同じように設定してください。
Value Name se_shot se_brust1 se_brust2 se_brust3
waitTime 0(0) 2.5(150) 2.7(162) 2.9(174)
loop Wait Time 2(120) 2(120) 2(120) 2(120)

もうスクリプトは必要ないので、非アクティブにします。

Animationを作成

以下のスクリプトを非アクティブにします。

  1. se_shot
  2. se_brust1
  3. se_brust2
  4. se_brust3

全ての設定が完了したら完成です。

お疲れ様でした!!

それではワールドをアップロードしてみましょう。

やったー。clusterのワールドで花火の音が鳴ったよー。

実際にアップロードしたclusterのワールド

花火のアセットKTK Fireworks Effects Volume1を設置してみました。

最後に

簡単に花火が設置できるので、VRChatclusterのワールドなどに設置すると夏らしいワールドが簡単に作成できます。 「KTK Fireworks Effects Volume1」気になってたけど、 clusterのワールドでも使えるか分からないなど購入をためらっていた方は是非とも購入してみてください。音が鳴らなくても見ているだけでもきれいです。

少し、Unityと仲良くなれば、音も鳴らせるようになりますよ❤。

ちょっと宣伝

(この記事は「FavDoc」で作成しました。)

では、明日は「にしあぷ」さんお願いします。







clusterのワールドで花火のアセットKTK Fireworks Effects Volume1の音が鳴らない問題を解決する

わびさびさんノート