ExportAvatar(アバター情報)

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

アバター情報を取得します。 ExportStudioGetOwner, GetAvatarsから取得できます。

名前 説明 バージョン
GetName ユーザー名を取得
GetId ユーザーIDを取得
IsOwner VCIの所有者かどうか
GetLocalPosition / GetPosition 足元の座標を取得 ※1 ※2
GetLocalRotation / GetRotation 回転を取得 ※1
GetLocalScale 縮尺を取得 ※1
GetRight / GetUp / GetForward (X/Y/Z軸)のベクトルを取得 ※1
GetLocalToWorldMatrix ローカル→ワールド座標に変換した行列を取得 ※1
GetBoneTransform ボーン情報を取得 ※1

※1
アバター情報の読込中や、アバター切替時にnilが返されることがあるので、使用する際はnilチェックを入れてください。
※2
ルームではHipボーンの位置を取得します

概要

  1. ExportStudioGetOwner, GetAvatarsを実行してアバター情報を取得する。
  2. 取得したアバター情報に対してGetBoneTransform, GetNameを実行して詳細な情報を取り出す。

注意点

基本サンプル

main.lua
    -- VCIの持ち主(VCIを出した人)の情報を取得する
    local owner = vci.studio.GetOwner()
    -- VCIの持ち主の名前を表示
    print(owner.GetName())
    -- boneのnilチェック
    local hipsBone = owner.GetBoneTransform("Hips")
    if hipsBone then
        -- Hipsのpositionを表示する
        print(hipsBone.position)
        -- Hipsのrotationを表示する
        print(hipsBone.rotation)   
    end

スタジオ内に居るプレイヤーの一覧を出力するサンプル

main.lua
-- スタジオ内に居るプレイヤーの一覧を表示する
local _avatars = vci.studio.GetAvatars()
for i = 1, #_avatars do
    print("avatars["..tostring(i).."]: ".._avatars[i].GetName())
end

テンプレート

main.lua
-- VCIの持ち主(VCIを出した人)の情報
local _ownerAvater
 
-- 初期化 (VCIの持ち主のみ実行)
if vci.assets.IsMine then
    _ownerAvater = vci.studio.GetOwner()
    print("ホスト : ".._ownerAvater.GetName())
end
 
-- リモートの確認
if vci.assets.IsMine == false then
    print("あなたはVCIの持ち主ではありません")
end
 
function updateAll()
    if vci.assets.IsMine then
        print("VCIの持ち主のみが実行する処理")
    end
end
 
function onUse(switch)
    -- 各クライアントでonUseFireOnce()を実行する
    vci.message.Emit("onUseFireOnce", tostring(switch))
end
 
function onUseFireOnce(sender, name, message)
 
    print("message : "..tostring(message))
 
    -- VCIの持ち主のみ実行
    if vci.assets.IsMine then
        -- ここで主に部屋主のアバター情報などを取得
        print("VCIの持ち主のみ実行する処理")
    end
    -- リモートで確認
    if vci.assets.IsMine == false then
        print("VCIの持ち主以外が実行する処理")
    end
 
end
 
-- Emit "onUseFireOnce" で onUseFireOnce()を実行する
vci.message.On("onUseFireOnce", onUseFireOnce)

_ownerAvaterに関係する処理をVCIの持ち主のクライアントのみで実行する場合のサンプルです。
VCIの持ち主が代表して実行し、リモートのクライアントからは_ownerAvaterにアクセスしないイメージです。
同期変数やメッセージを使って状態を同期させます。

GetName

GetName fun(): string

VCI所有者のユーザー名を表示します。

サンプル

main.lua
function onUse(use)
    local owner = vci.studio.GetOwner()
    print(owner.GetName())
end

実行結果

"バーチャルキャストちゃん"

GetId

GetId fun(): string

VCI所有者のユーザーIDを取得します。
スタジオ内のみで有効な値です。スタジオを抜けるとIDが変わります。

サンプル

main.lua
function onUse(use)
    local owner = vci.studio.GetOwner()
    print(owner.GetId())
end

実行結果

""79325077""

IsOwner

IsOwner fun(): bool

VCIの所有者かどうかを示す値を返します。

サンプル

main.lua
function onUse(use)
    local owner = vci.studio.GetOwner()
    print(owner.IsOwner())
end

実行結果

true

GetLocalPosition / GetPosition

GetLocalPosition fun(): Vector3
GetPosition fun(): Vector3

それぞれVCI所有者の足元のローカル、ワールド座標を取得します。

サンプル

main.lua
function onUse(use)
    local owner = vci.studio.GetOwner()
    print(owner.GetLocalPosition())
    print(owner.GetPosition())
end

実行結果

(1.8, 0.0 , 1.7)
(1.8, 0.0 , 1.7)

GetLocalRotation / GetRotation

GetLocalRotation fun(): Quaternion
GetRotation fun(): Quaternion

それぞれVCI所有者のローカル、ワールド回転を取得します。

サンプル

main.lua
function onUse(use)
    local owner = vci.studio.GetOwner()
    print(owner.GetLocalRotation())
    print(owner.GetRotation())
end

実行結果

(0.0, 0.4, 0.0, 0.9)
(0.0, 0.4, 0.0, 0.9)

GetLocalScale

GetLocalScale fun(): Vector3

VCI所有者の縮尺を取得します。

サンプル

main.lua
function onUse(use)
    local owner = vci.studio.GetOwner()
    print(owner.GetLocalScale())
end

実行結果

(1.0, 1.0, 1.0)

GetRight / GetUp / GetForward

GetRight fun(): Vector3
GetUp fun(): Vector3
GetForward fun(): Vector3

GetRight()は右方向(+X)のベクトル、owner.GetUp()は上方向(+Y)ベクトル、owner.GetForward()は正面(+Z)ベクトルを取得します。
サンプルはそれぞれVCI所有者のベクトルを取得しています。

サンプル

main.lua
function onUse(use)
    local owner = vci.studio.GetOwner()
    print(owner.GetRight())
    print(owner.GetUp())
    print(owner.GetForward())
end

実行結果

(1.0, 0.0, -0.3)
(0.0, 1.0, 0.1)
(0.3, -0.1, 1.0)

GetLocalToWorldMatrix

GetLocalToWorldMatrix fun(): Matrix4x4

3つのベクトルと現在の座標を取得できる。

サンプル

main.lua
function onUse(use)
    local owner = vci.studio.GetOwner()
    print(owner.GetRight())
    print(owner.GetUp())
    print(owner.GetForward())
    print(owner.GetLocalPosition())
    print(owner.GetLocalToWorldMatrix())
end

実行結果

(0.7, 0.0, 0.7)
(0.0, 1.0, 0.0)
(-0.7, 0.0, 0.7)
(2.0, 0.0, 2.3)
 0.68498 -0.02538 -0.72812  1.96983
 0.00523  0.99954 -0.02992  0.00000
 0.72855  0.01669  0.68479  2.26828
 0.00000  0.00000  0.00000  1.00000

GetBoneTransform

GetBoneTransformは、UnityHumanoidAvaterのHumanBodyBonesの変数名から、ボーン情報を得るための関数です。
無効なボーン名や、対応していないボーンを指定した場合は、nilが返ります。

UnityHumanoidAvaterに関しては、こちらをご覧ください。

サンプル

main.lua
    -- VCI所有者情報を取得する。
    local owner = vci.studio.GetOwner()
 
    ---- サブアイテムを取得する
    local subItem = vci.assets.GetTransform("SubItem1")
 
    -- 右手の位置にサブアイテムを動かす。
    local rightHand = owner.GetBoneTransform("RightHand")
    if rightHand then
        subItem.SetPosition(rightHand.position)
        subItem.SetRotation(rightHand.rotation)
    end

ボーン情報(Table型)

キー 説明
position Vector3 ボーンのワールド座標
rotation Quaternion ボーンのワールド回転