「VキャスのVCIで◯ine◯raftっぽいもの作る Advent Calendar 2024」7日目
Vキャス内で、穴を掘って、石を砕き、木を切って、組み合わせて武器を作って、何なら出てくる敵を倒して・・・
そんなことをやりたいなぁっていう試みを12月でできるところまで行こうというカレンダーの7日目です!
昨日は、5回叩いたらブロックを動かせる状態にしました。
ただ、石でも木でもみんな同様になっているので、今日はブロックの種類で動かせる回数を変えていきます。
土と石と木で動かせるようになる回数を変える
判断は、あたったブロックの名前に一致する文字列があるかどうかで判断するようにします。
そこで今日の作業は以下の通り。
① 文字列の部分一致で場合分けをする
② VR内で動きを確認する
それではやっていきます。
手順
① 文字列の部分一致で場合分けをする
土、石、木、葉で動かせるようになる数字を変えるために、まずブロックごとに何回で動かせるかをLuaのTable形式で定義をします。
local blocks = {Stone=20,Soil=5,Tree=10,leaf=1}
ブロック名の共通部分の文字列をkeyとして、valueには動かせるまでの回数を書きます。
石は20回、土は5回、木は10回、葉は1回といった形です。
次に、動かせるものも今のままだと小さくしてふっとばしてしまうので、それは除外する記述を入れます。
if string.find(subItemName,"move") == nil then
subItemNameは当たったVCISubItemの名前が入ってくる変数なので、この文字列の中に動かせるブロックは内包する文字列である「move」が含まれるかを判定し(string.findがその関数)、nilの場合は含まれないので、動かすブロックではないから、その下の処理をするという意味になります。
そして、ブロックの種類によって回数判定を変える処理を書きます。
for key, value in pairs(blocks) do
if string.find(subItemName,key) ~= nil then
if flg.count > value then
local item = vci.assets.GetTransform(flg.item)
item.SetLocalScale(Vector3.__new(0.001, 0.001, 0.001))
item.SetLocalPosition(Vector3.__new(100, 100, 100))
end
end
end
これは、最初にブロックごとの回数を書いた変数をfor文で回し、そのブロック種の回数以上連続で触って入れば、触れるブロックが表示される状態になる。
という処理です。
③ VR内で動きを確認する
VirtualCastを起動して、再度ルームに行き、VCIを触ってみます。
最初のブロックは持てず、葉っぱは1回触れると持ち運べるというようになりました。
おわりに
今日は、ブロック種類ごとに違う回数で動かせる状態にできるようになりました。
現状態では、動かせるようになったあとのブロックを何処かに設置することはできないままです。
明日は、動かしたブロックを配置して、また動かせない状態にしたいと思います。