この記事はアドベントカレンダー「【VCI】テーマパーク を作ろう 」の記事です。
今回の内容
今回は前回作成した花火のエフェクトを取り込んで行きたいと思います
今回は学ぶ技術は以下となります。
・Effectを実行する方法
・ランダム要素のあるスクリプトの書き方
Unity概要
早速Unityに取り込みます。詳細な手順は以下の公式ページを御覧ください。
・Effekseer (VCI対応)
wikiの説明ではエクスポートしたファイルをD&Dする説明になっていますが、
プロジェクトをEffekseer1.5のefkefcファイル形式で作成していれば、efkefcファイルをD&Dしても行けるそうです。
ただし、その場合も画像ファイルの相対パスの維持は必要です。
今回は連続で花火を打ち上げる方式で作成します。
たくさん花火が上がるので他の人と同期はしなくて良いとし、子オブジェクトとしていくつか作成しておきます。
Effect付きオブジェクトを選択した際にSceneの右下にEffect用のパネルが出てきます。こちらで再生して内容を確認できます。
コードの作成
Effectの再生はスクリプトより行います。詳細は以下の公式ページを御覧ください。
・Effekseer (エフェクト)
上記を参考に作成したコードが以下となります。
花火の間隔と位置をバラけさせるためにmatn.randomを使用しています。
--- 次の花火が再生される時間。
local nextExplosionTime = vci.me.Time.TotalSeconds
--- 次のエフェクト再生対象となる花火のNo
local targetFireWorkNo = 1
function updateAll()
local minute = tonumber(os.date("%M"))
if minute == illminateMinute and nextExplosionTime < vci.me.Time.TotalSeconds then
--花火の出現位置をランダムなるように設定
local x = math.random(-50,50)
local y = math.random(-20,20)
local z = math.random(-4,4)
--アイテムを取得して位置と大きさを設定
local item = vci.assets.GetTransform("Fireworks "..targetFireWorkNo)
item.SetLocalPosition(Vector3.__new(x,y,z))
item.SetLocalScale(2*(Vector3.one+ Vector3.one*math.random(-5,10)/10))
--エフェクトを取得して再生
local effect = vci.assets.GetEffekseerEmitter("Fireworks "..targetFireWorkNo)
effect.PlayOneShot()
--次実行する花火の番号と実行する時間を設定
targetFireWorkNo = targetFireWorkNo%20 + 1
nextExplosionTime = vci.me.Time.TotalSeconds + math.random(1,15)/10
end
end
実際に動かすと以下のようになります。
ちょべりパークに花火がやってきました!٩( 'ω' )و
— #らいと(きょろ、ちょべりば→ぐ) (@lightjug) December 29, 2020
記事も書きました!これで後1日分です!٩( 'ω' )و https://t.co/cj3UuStLEN pic.twitter.com/yaS7TG3hWx
終わりに
いかがでしたでしょうか?
今回は花火がいきなり空中に出る方式で作成しましたが、アニメーションやスクリプトで地上から玉を発射してから爆発エフェクトを再生させることも可能だと思います。
次回はRoomの設定を公開について説明します。