ExportRoomPlayer/Controller(プレイヤー情報と物理制御)

このページは過去の情報となります。
新しいスクリプトリファレンスはこちらになります。

プレイヤー情報を取得、物理演算の制御を行うクラスです。

メンバ変数・関数一覧

ExportRoomPlayer
名前 説明
IsAvailable プレイヤーがルームに存在するか
GetId プレイヤーのIDを取得
GetName プレイヤーの名前を取得
GetUserType プレイヤーのアカウント種別を取得
GetIsLocal ローカルのプレイヤーがどうかを取得
GetPosition プレイヤーの足元に相当する位置を取得
GetRotation プレイヤーの頭のY軸回転に相当する回転を取得
GetForward プレイヤーの前方を指す正規化ベクトルを取得
GetUp プレイヤーの上方を指す正規化ベクトルを取得
GetRight プレイヤーの右方を指す正規化ベクトルを取得
GetRoomPlayerController プレイヤーに対する操作を提供するオブジェクトを取得
Character プレイヤーが使用しているキャラクター(アバター)の情報を取得
ExportRoomPlayerController
名前 説明
IsGrounded プレイヤーRigidbodyが接地しているか
GetVelocity プレイヤーRigidbodyの速度
GetMass プレイヤーRigidbodyの質量
SetVelocity プレイヤーRigidbodyの速度を設定する
TeleportTo プレイヤーRigidbodyのワールド位置、ワールド角度を指定して移動する
AddForce プレイヤーRigidbodyに力を与える

IsAvailable

ExportRoomPlayer.IsAvailable fun(): bool
プレイヤーがルームに存在するか。
存在しない場合は false を返す。

GetId

ExportRoomPlayer.GetId fun(): string
プレイヤーのIDを取得する。
フォーマットは最大16文字の16進数文字列 (e.g. “4b32da78cc0a9213”)

サンプル

main.lua
local player = vci.vc.room.GetLocalPlayer()
 
-- プレイヤー情報の取得
print("ID: "..player.GetId())

GetName

ExportRoomPlayer.GetName fun(): string
プレイヤーの名前を取得する。

サンプル

main.lua
local player = vci.vc.room.GetLocalPlayer()
 
-- プレイヤー情報の取得
print("Name: "..player.GetName())

GetUserType

ExportRoomPlayer.GetUserType fun(): string
プレイヤーのアカウント種別を取得する。

返り値

TSO アカウントを連携しているプレイヤー
Anonymous アカウント連携をしていないプレイヤー

サンプル

main.lua
local player = vci.vc.room.GetLocalPlayer()
 
-- プレイヤー情報の取得
print("UserType: "..player.GetUserType()) -- "TSO" or "Anonymous"

GetIsLocal

ExportRoomPlayer.GetIsLocal fun(): boolean
ローカルのプレイヤーがどうかを取得する。

GetPosition

ExportRoomPlayer.GetPosition fun(): Vector3
プレイヤーの足元に相当する位置を取得する。
※リモートプレイヤーかつ Character.IsAvailable() が false の場合は nil が返されます。
※実装の都合上、数フレーム前の時点の値が返ります。

サンプル

main.lua
local player = vci.vc.room.GetLocalPlayer()
 
-- プレイヤー情報の取得
print("Position: "..tostring(player.GetPosition()))

GetRotation

ExportRoomPlayer.GetRotation fun(): Quaternion
プレイヤーの頭のY軸回転に相当する回転を取得する。
※リモートプレイヤーかつ Character.IsAvailable() が false の場合は nil が返されます。
※実装の都合上、数フレーム前の時点の値が返ります。

サンプル

main.lua
local player = vci.vc.room.GetLocalPlayer()
 
-- プレイヤー情報の取得
print("Rotation: "..tostring(player.GetRotation()))

GetForward

ExportRoomPlayer.GetForward fun(): Vector3
プレイヤーの前方を指す正規化ベクトルを取得する。
※リモートプレイヤーかつ Character.IsAvailable() が false の場合は nil が返されます。
※実装の都合上、数フレーム前の時点の値が返ります。

※ページ下のサンプルを参照のこと。

GetUp

ExportRoomPlayer.GetUp fun(): Vector3
プレイヤーの上方を指す正規化ベクトルを取得する。
※リモートプレイヤーかつ Character.IsAvailable() が false の場合は nil が返されます。
※実装の都合上、数フレーム前の時点の値が返ります。

※ページ下のサンプルを参照のこと。

GetRight

ExportRoomPlayer.GetRight fun(): Vector3
プレイヤーの右方を指す正規化ベクトルを取得する。
※リモートプレイヤーかつ Character.IsAvailable() が false の場合は nil が返されます。
※実装の都合上、数フレーム前の時点の値が返ります。

※ページ下のサンプルを参照のこと。

GetRoomPlayerController

ExportRoomPlayer.GetRoomPlayerController fun(): ExportRoomPlayerController
プレイヤーに対する操作を提供するオブジェクトを取得する。
※ローカルプレイヤーに対してのみ取得可能。
※ローカルプレイヤーでない場合は nil を返します。

サンプル

main.lua
-- 物理演算制御クラスの取得
local playerController = player.GetRoomPlayerController() -- ローカルプレイヤー以外では nil が返る

Character

ExportRoomPlayer.Character ExportCharacter
プレイヤーが使用しているキャラクター(アバター)の情報を取得する。

サンプル

main.lua
-- キャラクターモデル情報の取得
local character = player.Character

IsGrounded

ExportRoomPlayerController.IsGrounded fun(): boolean
プレイヤーRigidbodyが接地しているか。
※実装の都合上、数フレーム前の時点の値が返ります。

サンプル

main.lua
local playerController = localPlayer.GetRoomPlayerController() -- ローカルプレイヤー以外では nil が返る
 
-- 物理演算情報の取得
print("IsGrounded: "..tostring(playerController.IsGrounded()))

GetVelocity

ExportRoomPlayerController.GetVelocity fun(): Vector3
プレイヤーRigidbodyの速度 [m/s] を取得する。
※実装の都合上、数フレーム前の時点の値が返ります。

サンプル

main.lua
local playerController = localPlayer.GetRoomPlayerController() -- ローカルプレイヤー以外では nil が返る
 
-- 物理演算情報の取得
print("Velocity: "..tostring(playerController.GetVelocity()))

GetMass

ExportRoomPlayerController.GetMass fun(): float
プレイヤーRigidbodyの質量[kg]を取得する。
※実装の都合上、数フレーム前の時点の値が返ります。

サンプル

main.lua
local playerController = localPlayer.GetRoomPlayerController() -- ローカルプレイヤー以外では nil が返る
 
-- 物理演算情報の取得
print("Mass: "..playerController.GetMass())

SetVelocity

ExportRoomPlayerController.SetVelocity fun(velocity: Vector3)
プレイヤーRigidbodyの速度 [m/s] を設定する。

※ページ下のサンプルを参照のこと。

TeleportTo

ExportRoomPlayerController.TeleportTo fun(position: Vector3, rotation: Quaternion)
プレイヤーRigidbodyのワールド位置、ワールド角度を指定して移動する。
rotationはY軸回転成分のみ反映される。

※ページ下のサンプルを参照のこと。

AddForce

ExportRoomPlayerController.AddForce fun(force: Vector3, forceMode: ExportForce)
プレイヤーRigidbodyに力を与える。

引数

forceMode: vci.forceMode.Force force[N] の力を継続的に与える
forceMode: vci.forceMode.Impulse force[Ns] の力積を瞬発的に与える

サンプル

main.lua
local localPlayer =  vci.vc.room.GetLocalPlayer()
local playerController = localPlayer.GetRoomPlayerController() -- ローカルプレイヤー以外では nil が返る
 
-- 物理演算情報の取得
print("IsGrounded: "..tostring(playerController.IsGrounded()))
print("Velocity: "..tostring(playerController.GetVelocity()))
print("Mass: "..playerController.GetMass())
 
-- キー入力に応じてプレイヤーを動かす
local function moveHorizontallyByKeyboard(axis)
    if axis==Vector3.zero then return end
 
    -- 移動量
    local speed = 10 --[m/s?]
    local deltaAngle = 10 --[degree]
 
    -- axis.xz で水平方向に初速度を与えて動かす
    local direction = localPlayer.GetRight() * axis.x
    direction = direction + localPlayer.GetForward() * axis.z
    if direction ~= Vector3.zero then
        playerController.SetVelocity(direction * speed)
    end
 
    -- axis.y で回転を与えて現在の座標と同位置にテレポート
    if axis.y ~= 0 then
        local position = localPlayer.GetPosition()
        local rotation = localPlayer.GetRotation()
        rotation = Quaternion.Euler(0, deltaAngle * axis.y, 0) * rotation
        playerController.TeleportTo(position, rotation)
    end
 
    print(tostring(localPlayer.GetPosition()) .. "," ..tostring(localPlayer.GetRotation()))
end
 
-- 鉛直上方向に力を与える
local function addJumpForceToPlayerByKeyboard(button)
    if not button then return end
    local impulse = 10 --[Ns] 
    local mass = playerController.GetMass()
    local force = impulse * mass
    print("[AddForce] IsGrounded: "..tostring(playerController.IsGrounded()))
    playerController.AddForce(Vector3.up * force, vci.forceMode.Impulse) 
end
 
-- 鉛直上方向の初速度を与える
local function addJumpVelocityToPlayerByKeyboard(button)
    if not button then return end
    local speed = 10 -- [m/s]
    print("[SetVelocity] IsGrounded: "..tostring(playerController.IsGrounded()))
    playerController.SetVelocity(Vector3.up * speed)
end
 
-- 原点に移動
local function teleportToOriginByKeyboard(button)
    if not button then return end
    playerController.TeleportTo(Vector3.zero, Quaternion.identity)
    print("reset position")
end
 
vci.StartCoroutine(
    coroutine.create(
        function()
            while true do    
                -- GetAxisInput()
                -- →: x = +1, ←: x = -1
                -- U: y = +1, I: y = -1
                -- ↑: z = +1, ↓: z = -1
                -- Acts like Unity GetKey
 
                -- GetButtonInput()
                -- Only 1, 2, 3, 4 key
                -- Acts like Unity GetKeyDown
 
                moveHorizontallyByKeyboard(vci.me.GetAxisInput())
                addJumpForceToPlayerByKeyboard(vci.me.GetButtonInput(1))
                addJumpVelocityToPlayerByKeyboard(vci.me.GetButtonInput(2))
                teleportToOriginByKeyboard(vci.me.GetButtonInput(3))
 
                coroutine.yield()
            end
        end
))