ユーザ用ツール

サイト用ツール


vci:sample:shooting:no1

シューティングゲーム


相手の風船を撃てます。風船を握ると状態をリセット。
10発撃つと弾がなくなります。マガジンを銃にぶつけるとリロードできます。

サンプルデータ:
https://seed.online/items/b5c114f6b3df0f6332657a53bd3f7422d12d9becfe38d528f23e892cfd284ecc


コンポーネント設定

各オブジェクトのコンポーネントは次のとおりです。

自分の風船と相手の弾の物理衝突を正確に出す必要があるため、
GroupIDは青の弾、青の銃、青のマガジン、赤の風船
赤の弾、赤の銃、赤のマガジン、青の風船となるようにします。


















VCIスクリプト

main.lua
--SubItemの取得
gun_B=vci.assets.GetSubItem("gun_B")
gun_R=vci.assets.GetSubItem("gun_R")
bullet_B=vci.assets.GetSubItem("bullet_B")
bullet_R=vci.assets.GetSubItem("bullet_R")
 
ammo_limit_B=10--残弾
ammo_limit_R=10
 
---[SubItemの所有権]アイテムにCollider(not Trigger)が接触したときに呼ばれる。
---@param item string @SubItem名
---@param hit string @Collider名
function onCollisionEnter(item, hit)
    if (item=="target_B" and hit == "bullet_R") or (item=="bullet_R" and hit=="target_B") then--青風船が割れた
        vci.assets._ALL_PlayAudioFromName("hit_B")
        vci.assets._ALL_PlayAnimationFromName("hit_B",false)
    elseif (item=="target_R" and hit == "bullet_B") or (item=="bullet_B" and hit=="target_R") then--赤風船が割れた
        vci.assets._ALL_PlayAudioFromName("hit_R")
        vci.assets._ALL_PlayAnimationFromName("hit_R",false)
    elseif (item=="gun_B" and hit == "ammo_B") or (item=="ammo_B" and hit=="gun_B") then--青リロード
        vci.assets._ALL_PlayAudioFromName("reload")
        vci.assets.HapticPulseOnGrabbingController(item, 500, 0.3)
        ammo_limit_B=10
    elseif (item=="gun_R" and hit == "ammo_R") or (item=="ammo_R" and hit=="gun_R") then--赤リロード
        vci.assets._ALL_PlayAudioFromName("reload")
        vci.assets.HapticPulseOnGrabbingController(item, 500, 0.3)
        ammo_limit_R=10
    end
end
 
 
 
 
 
---[SubItemの所有権]アイテムをグラッブしてグリップボタンを押すと呼ばれる。
---@param use string @押されたアイテムのSubItem名
function onUse(use)
    --ボタンを押すと弾の位置を銃に合わせて、力を加える
    if use=="gun_B" then --青の銃の処理
        --発射の処理
        if ammo_limit_B>0 then--残弾あり
            ammo_limit_B=ammo_limit_B-1 --残弾マイナス1
            vci.assets._ALL_PlayAudioFromName("shoot")
            vci.assets.HapticPulseOnGrabbingController(use, 2000, 0.1)
            bullet_B.SetLocalPosition(gun_B.GetLocalPosition())
            bullet_B.SetLocalRotation(gun_B.GetLocalRotation())
            bullet_B.SetVelocity(Vector3.zero)--rigitbodyにかかる速度をゼロに
            bullet_B.SetAngularVelocity(Vector3.zero)--rigitbodyにかかる回転をゼロに
 
            local houkou=gun_B.GetForward()--銃の前方
            bullet_B.AddForce(5000*houkou)
        else--残弾なしのとき
            vci.assets._ALL_PlayAudioFromName("noammo")
            vci.assets.HapticPulseOnGrabbingController(use, 500, 0.05)
        end
 
    elseif use=="gun_R" then --赤の銃の処理
        if ammo_limit_R>0 then--残弾あり
            ammo_limit_R=ammo_limit_R-1 --残弾マイナス1
            vci.assets._ALL_PlayAudioFromName("shoot")
            vci.assets.HapticPulseOnGrabbingController(use, 2000, 0.1)
            bullet_R.SetLocalPosition(gun_R.GetLocalPosition())
            bullet_R.SetLocalRotation(gun_R.GetLocalRotation())
            bullet_R.SetVelocity(Vector3.zero)--rigitbodyにかかる速度をゼロに
            bullet_R.SetAngularVelocity(Vector3.zero)--rigitbodyにかかる回転をゼロに
 
            local houkou=gun_R.GetForward()--銃の前方
            bullet_R.AddForce(5000*houkou)
        else--残弾なしのとき
            vci.assets._ALL_PlayAudioFromName("noammo")
            vci.assets.HapticPulseOnGrabbingController(use, 500, 0.05)
        end
 
    elseif use=="target_B" then --ターゲットのリセット青
        vci.assets._ALL_PlayAnimationFromName("reset_B",false)
    elseif use=="target_R" then --ターゲットのリセット赤
        vci.assets._ALL_PlayAnimationFromName("reset_R",false)
    end
end
vci/sample/shooting/no1.txt · 最終更新: 2019/05/27 20:44 by navana

ページ用ツール