出来たのがこれ。
やりたかった機能は以下です。
- Useしたらアニメーション太鼓が叩かれるアニメーションが始まり、音も流れ出す。
- 横のプラスマイナスのキューブをタッチしたら流れる太鼓の音のBPMを変えられる。表示も変わる。
vciのバージョンはUniVCI-0.17です。
スクリプトの全体
bool_loop = false
bool_clock = false
count = 1
--テクスチャの中の分割数
local TOTAL = 9
bgmvol = 0.5
--キューブに触れるとcountを計算、テクスチャを動かす。
function onTriggerEnter(item, hit)
if item == "Cube1" then
if count >= TOTAL-1 then
count = 0
else
count = count + 1
end
SetTextureOffset(count)
end
if item == "Cube" then
if count < 1 then
count = 8
else
count = count -1
end
SetTextureOffset(count)
end
end
--Useするとアニメーションを動かす。bool_loopとbool_clockをtrueにする。
function onUse(use)
if use == "taiko" then
if bool_loop == false then
vci.assets._ALL_PlayAnimationFromName("taiko_motion2",true)
bool_loop = true
bool_clock = true
else
vci.assets._ALL_StopAnimation()
vci.assets.audio._ALL_Stop("taiko_sound")
bool_loop = false
end
end
end
--bool_loopがtrueの時音を鳴らすタイミング計算
--bool_clockがtrueになったら再生した時間を記録してすぐfalseに戻す。
--clockStartでos.clockを引いた数がBPMを越えたら音を鳴らす。
function updateAll()
if bool_loop == true then
if bool_clock == true then
clockStart = os.clock() --再生した時間を記録
bool_clock = false
end
if os.clock() - clockStart > 60*(1/(110 +(count *10 ))) then
vci.assets.audio._ALL_Play("taiko_sound", bgmvol, false)
bool_clock = true
end
end
end
--画像の表示場所計算
function SetTextureOffset( count )
local offset = Vector2.zero
-- y shift
local Yshift = math.floor(count / 3)
offset.y = -(1/3) * Yshift
-- x shift
local Xshift = count % 3
offset.x = (1/3) * Xshift
vci.assets._ALL_SetMaterialTextureOffsetFromIndex(8, offset)
end
SetTextureOffset(count)
テンポの表示を変える。
↓の「Useすると柄が変わるポスター」がわかりやすい。
https://virtualcast.jp/wiki/doku.php?id=vci:sample:onuse:no5
このイベント関数で、テクスチャの表示区間?場所?を変えます。
↓のような画像があるとして、
1の部分、2の部分と表示場所を移して行く感じです。オフセット移動とか書かれてもわかりづらいよ。。。
続きを読む