2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「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を触ってみます。
20241207223726_1.jpg

最初のブロックは持てず、葉っぱは1回触れると持ち運べるというようになりました。
20241207223818_1.jpg

おわりに

今日は、ブロック種類ごとに違う回数で動かせる状態にできるようになりました。
現状態では、動かせるようになったあとのブロックを何処かに設置することはできないままです。

明日は、動かしたブロックを配置して、また動かせない状態にしたいと思います。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?