~~NOTOC~~
====== ExportRoomPlayer/Controller(プレイヤー情報と物理制御) ======
このページは過去の情報となります。\\
新しいスクリプトリファレンスは**[[https://developer.virtualcast.jp/vci-docs/api/|こちら]]**になります。
プレイヤー情報を取得、物理演算の制御を行うクラスです。
* **UniVCI v0.35** 以降で Export される VCI で使用できます。
* **バーチャルキャスト v2.3.0** 以降で動作します。
* 現在、この API は**ルーム上でのみ動作します**。
===== メンバ変数・関数一覧 =====
^ ExportRoomPlayer ^^
^ 名前 ^ 説明 ^
| [[vci/script/reference/exportroomplayer#IsAvailable ]] | プレイヤーがルームに存在するか |
| [[vci/script/reference/exportroomplayer#GetId ]] | プレイヤーのIDを取得 |
| [[vci/script/reference/exportroomplayer#GetName ]] | プレイヤーの名前を取得 |
| [[vci/script/reference/exportroomplayer#GetUserType ]] | プレイヤーのアカウント種別を取得 |
| [[vci/script/reference/exportroomplayer#GetIsLocal ]] | ローカルのプレイヤーがどうかを取得 |
| [[vci/script/reference/exportroomplayer#GetPosition ]] | プレイヤーの足元に相当する位置を取得 |
| [[vci/script/reference/exportroomplayer#GetRotation ]] | プレイヤーの頭のY軸回転に相当する回転を取得 |
| [[vci/script/reference/exportroomplayer#GetForward ]] | プレイヤーの前方を指す正規化ベクトルを取得 |
| [[vci/script/reference/exportroomplayer#GetUp ]] | プレイヤーの上方を指す正規化ベクトルを取得 |
| [[vci/script/reference/exportroomplayer#GetRight ]] | プレイヤーの右方を指す正規化ベクトルを取得 |
| [[vci/script/reference/exportroomplayer#GetRoomPlayerController ]] | プレイヤーに対する操作を提供するオブジェクトを取得 |
| [[vci/script/reference/exportroomplayer#Character ]] | プレイヤーが使用しているキャラクター(アバター)の情報を取得 |
^ ExportRoomPlayerController ^^
^ 名前 ^ 説明 ^
| [[vci/script/reference/exportroomplayer#IsGrounded ]] | プレイヤーRigidbodyが接地しているか |
| [[vci/script/reference/exportroomplayer#GetVelocity ]] | プレイヤーRigidbodyの速度 |
| [[vci/script/reference/exportroomplayer#GetMass ]] | プレイヤーRigidbodyの質量 |
| [[vci/script/reference/exportroomplayer#SetVelocity ]] | プレイヤーRigidbodyの速度を設定する |
| [[vci/script/reference/exportroomplayer#TeleportTo ]] | プレイヤーRigidbodyのワールド位置、ワールド角度を指定して移動する |
| [[vci/script/reference/exportroomplayer#AddForce ]] | プレイヤーRigidbodyに力を与える |
===== IsAvailable =====
ExportRoomPlayer.**IsAvailable fun(): bool**\\
プレイヤーがルームに存在するか。\\
存在しない場合は false を返す。
===== GetId =====
ExportRoomPlayer.**GetId fun(): string**\\
プレイヤーのIDを取得する。\\
フォーマットは最大16文字の16進数文字列 (e.g. ''"4b32da78cc0a9213"'')
=== サンプル ===
local player = vci.vc.room.GetLocalPlayer()
-- プレイヤー情報の取得
print("ID: "..player.GetId())
===== GetName =====
ExportRoomPlayer.**GetName fun(): string**\\
プレイヤーの名前を取得する。
=== サンプル ===
local player = vci.vc.room.GetLocalPlayer()
-- プレイヤー情報の取得
print("Name: "..player.GetName())
===== GetUserType =====
ExportRoomPlayer.**GetUserType fun(): string**\\
プレイヤーのアカウント種別を取得する。
=== 返り値 ===
^TSO| アカウントを連携しているプレイヤー|
^Anonymous| アカウント連携をしていないプレイヤー|
=== サンプル ===
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 が返されます。\\
※実装の都合上、数フレーム前の時点の値が返ります。
=== サンプル ===
local player = vci.vc.room.GetLocalPlayer()
-- プレイヤー情報の取得
print("Position: "..tostring(player.GetPosition()))
===== GetRotation =====
ExportRoomPlayer.**GetRotation fun(): Quaternion**\\
プレイヤーの頭のY軸回転に相当する回転を取得する。\\
※リモートプレイヤーかつ ''Character.IsAvailable()'' が false の場合は nil が返されます。\\
※実装の都合上、数フレーム前の時点の値が返ります。
=== サンプル ===
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 を返します。
=== サンプル ===
-- 物理演算制御クラスの取得
local playerController = player.GetRoomPlayerController() -- ローカルプレイヤー以外では nil が返る
===== Character =====
ExportRoomPlayer.**Character [[https://developer.virtualcast.jp/vci-docs/api/classes/ExportCharacter/index.html|ExportCharacter]]**\\
プレイヤーが使用しているキャラクター(アバター)の情報を取得する。\\
=== サンプル ===
-- キャラクターモデル情報の取得
local character = player.Character
===== IsGrounded =====
ExportRoomPlayerController.**IsGrounded fun(): boolean**\\
プレイヤーRigidbodyが接地しているか。\\
※実装の都合上、数フレーム前の時点の値が返ります。
=== サンプル ===
local playerController = localPlayer.GetRoomPlayerController() -- ローカルプレイヤー以外では nil が返る
-- 物理演算情報の取得
print("IsGrounded: "..tostring(playerController.IsGrounded()))
===== GetVelocity =====
ExportRoomPlayerController.**GetVelocity fun(): Vector3**\\
プレイヤーRigidbodyの速度 [m/s] を取得する。\\
※実装の都合上、数フレーム前の時点の値が返ります。
=== サンプル ===
local playerController = localPlayer.GetRoomPlayerController() -- ローカルプレイヤー以外では nil が返る
-- 物理演算情報の取得
print("Velocity: "..tostring(playerController.GetVelocity()))
===== GetMass =====
ExportRoomPlayerController.**GetMass fun(): float**\\
プレイヤーRigidbodyの質量[kg]を取得する。\\
※実装の都合上、数フレーム前の時点の値が返ります。
=== サンプル ===
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] の力積を瞬発的に与える|
=== サンプル ===
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
))