Language:

サイドバー

バーチャルキャスト公式Wiki

メニュー

デバイス

アプリケーション

アセット

配信

その他

リリース情報

デベロッパー向け


開発環境

GLB

vci:sample:gameapi:glider

つかんで飛ぶ紙飛行機

対応バージョンは、UniVCI v0.35以降です。

つかんだ状態でジャンプすると、グライダーのように滑空したり、つかんだ位置からわずかに上昇飛行が出来るVCIです。

サンプルデータ

Unitypackage

コンポーネント設定

VCI Object

Sub Item 設定一覧 (クリックで展開)
VCI Sub Item : GliderHandle
VCI Attchable (装着ボーンはLeft Hand/Right Hand)

VCIスクリプト

main.lua
local localPlayer = vci.vc.room.GetLocalPlayer()
 
local gravity = Vector3.Magnitude(vci.vc.room.GetGravity())
local playerController = localPlayer.GetRoomPlayerController() 
local handle = vci.assets.GetTransform("GliderHandle")
 
local glindStartedY = 0
local initialPotential = 0
local _grounded = false
local prevTime = os.time()
 
 
function updateAll()
 
    if handle.IsAttached == false or handle.IsMine == false then
        return
    end
 
    -- 最初に足を離したら開始
    if _grounded == true and playerController.IsGrounded() == false then
        initalize()
    end
 
    _grounded = playerController.IsGrounded()
    if _grounded == true then return end
 
    local y = localPlayer.GetPosition().y
 
    -- 落下開始地点からの差分
    local deltaY = (glindStartedY + initialPotential) - y
 
    if deltaY <0 then return end
 
    local f = handle.GetForward().normalized
 
    -- 落下した分の位置エネルギーがすべて運動エネルギーに変わったとする
    local t = math.sqrt(2.0 * gravity * deltaY)
 
    local next = f * t
 
    playerController.SetVelocity(next)
end
 
function initalize()
    -- 落下開始地点
    glindStartedY = localPlayer.GetPosition().y
    local v = Vector3.Magnitude(playerController.GetVelocity())
    -- 落下時に初速を持っていたらその分だけ高い位置から開始したとみなす
    initialPotential = v * v / (gravity * 2.0)
end
vci/sample/gameapi/glider.txt · 最終更新: 2022/09/07 19:08 by pastatto

ページ用ツール