ユーザ用ツール

サイト用ツール


vci:script:reference:exporttransform

ExportTransform


ExportTransformクラスはTransformやRigidbodyに干渉する事のできるクラスです。
VCIの移動、回転、縮尺の変更や、力を与えて回転させたり、吹き飛ばしたりする事ができます。


メソッド一覧

メソッド一覧は[EmbeddedScriptWorkspace]フォルダ内の[types.lua]を開くと最新のメソッド一覧を確認できます。
表記の省略の為、Vector3型Vec3number型num と表記してあります。
引数は () の中に、戻り値の型は :(セミコロン) の後に表記してあります。

メソッド名 説明
GetName fun(): string Subitemの名前を取得できます。
GetLocalPosition fun(): Vec3 SubitemのPositionを取得できます。
(Subitemローカル)
GetPosition fun(): Vec3 SubitemのPositionを取得できます。
GetLocalRotation fun(): Quaternion SubitemのRotationを取得できます。
(Subitemローカル)
GetRotation fun(): Quaternion SubitemのRotationを取得できます。
GetLocalScale fun(): Vec3 Subitemのscaleを取得できます。
GetForward fun(): Vec3 Subitemを基準にした正面方向(Z軸プラス)のベクトルを取得できます。
GetRight fun(): Vec3 Subitemを基準にした右方向(X軸プラス)のベクトルを取得できます。
GetUp fun(): Vec3 Subitemを基準にした上方向(Y軸プラス)のベクトルを取得できます。
GetLocalToWorldMatrix fun(): Matrix4x4 ローカル座標からワールド座標に変換した時の行列
BindUpdate fun(callback: usertype)
GetAnimation fun(): ExportAnimation ExportAnimationを使用するのに使います
GetHashCode fun(): num 使用しません。
ToString fun(): string
IsMine bool SubItemの所有者の場合 true を返し、そうでなければ nil を返します。
SetPosition fun(position: Vec3) SubitemのPositionの値をVec3で指定した値に変更します。
SetLocalPosition fun(localPosition: Vec3) SubitemのPositionの値をVec3で指定した値に変更します。
SetRotation fun(rotation: Quaternion) SubitemのRotationの値をQuaternionで指定した値に変更します。
SetLocalRotation fun(localRotation: Quaternion) SubitemのRotationの値をQuaternionで指定した値に変更します。
SetLocalScale fun(localScale: Vec3) Subitemのscaleの値をVec3で指定した値に変更します。
SetVelocity fun(velocity: Vec3) Subitemに加わっている力をVec3で指定した値に変更します。
SetAngularVelocity fun(angularVelocity: Vec3) Subitemに加わってる回転をVec3で押した方向に変更します。
AddForce fun(force: Vec3) Vec3で指定した値の力をSubitemに与えます。

ExportTransformクラスを使うには Subitem = vci.assets.GetSubItem(“Subitem”) という風にSubitemを名前で指定してインスタンス化します。
その後、 Subitem.各メソッド() という風に実行してゆきます。


VCIの同期について

ネットワーク越しに動くものを考える場合、同期を意識する必要があります。
バーチャルキャストのスタジオの中にAさん、Bさん、Cさんと居た時、Aさんが動かした結果をBさん、Cさんに反映させる事を「同期させる」といいます。
一方、動かした人のパソコンでしか動かないような設定は「ローカルのみで動作する」というような言い方になります。
VCIでは主に同期させる方法は以下の通りになります。

  • transformはバーチャルキャストの機能によって同期します。
  • _ALL_ のついたメソッドは同期して実行されます。
  • 共有変数を使用してVCIの状態を同期させます。

つまり、transformの同期については、強く意識せずともVCIを出したクライアントで動かした結果が、バーチャルキャストの機能を通じて他のクライアントにも適用されます。
詳細なtransformの同期については VCIアイテムとSubItemについて をご確認ください。


GetSubItem()

サンプル

main.lua
--ExportTransform
--SubItemに設定してるオブジェクト名は「SubItem」
SubItem = vci.assets.GetSubItem("SubItem") 
 
print(SubItem.GetName())
print(SubItem.ToString())


実行結果

SubItem
VCIEmbedded.LuaMoonSharp.ExportTransform

vci.assets.GetSubItem() の引数にSubItemのオブジェクト名を入れると、
引数にしたSubItemのExportTransformをインスタンス化する事ができます。
インスタンス化したExportTransformのメソッドを使用する事により、transformの値を変更したり取得する事ができます。

複数のsubItemをfor文で宣言する

main.lua
-- テーブルをfor文で宣言する
local _Items = {}
for i=1, 5 do
    _Items[i] = vci.assets.GetSubItem("Item"..tostring(i))
    print(_Items[i].."をテーブルに登録しました。")
end

SubItemの名前を Item1 Item2 Item3 という風に連番で命名します。
そしたら for文を使って1からの連番で GetSubItem() する事ができます。
※iは tostring(i) で文字列に変換できます。


IsMine

サンプル

main.lua
subitem = vci.assets.GetSubItem('SubItem')
 
function updateAll() -- 所有権に関係なく全ユーザーが十個する
    if subitem.IsMine then -- SubItemの所有者の場合 true
        subitem.SetPosition = Vector3.__new(1, 2, 3)
    end
end

SubItemの所有者の場合だけ処理したい場合などに使用します。
所有権については 所有権とイベント関数の関係 を参考にしてください。


Get transform

サンプル

main.lua
--ExportTransform
--SubItemに設定してるオブジェクト名は「SubItem」
SubItem = vci.assets.GetSubItem("SubItem") 
 
print(SubItem.GetPosition())
print(SubItem.GetLocalPosition())
print(SubItem.GetRotation())
print(SubItem.GetLocalRotation())
print(SubItem.GetLocalScale())
print(SubItem.GetForward())


実行結果

(0.0, 1.2, 0.0)
(0.0, 1.2, 0.0)
(0.0, 0.0, 0.0, 1.0)
(0.0, 0.0, 0.0, 1.0)
(1.0, 1.0, 1.0)
(0.0, 0.0, 1.0)

GetName()

戻り値:string
VCIのオブジェクト名を取得できます。


GetPosition() / GetLocalPosition()

戻り値:Vector3
Subitemの現在地を取得できます。
Position()の場合、Unityの原点(0,0,0)が基準になり、LocalPosition()の場合はVCIを出現させた位置が原点として扱われます。


GetRotation() / GetLocalRotation()

戻り値:Quaternion
Subitemの回転(Quaternion)を取得できます。
Rotation()の場合、Unity全体が基準の回転(Z+が正面)となり、LocalRotation()の場合はVCIを出現させた時の方向を基準とした回転として扱われます。
SetRotation(Quaternion.identity) UnityのZ+が正面方向として、姿勢を変更できます。


GetLocalScale()

戻り値:Vector3
SubItemの縮尺を取得できます。

スケールが変更可能なSubItemのスケジュールを変える場合、1度GetLocalScale()で取得した値に対して、目的の倍率を掛けた後にSetLocalScale()とする事で「現在の大きさを基準したscaleの変更」をする事ができます。
(SetLocalScale()のみだと、現在の大きさを考慮しないスケールの変更となる)


GetForward()

戻り値:Vector3
SubItemが現在向いてる前方向のベクトルを取得できます。
(サブアイテムを基準にしたZ軸プラスのベクトル)

用途としては…GetForward()でオブジェクトの正面方向のベクトルを取得し、onUngrab()(SubItemを話した時)に正面方向のベクトルを使って AddForce()で力を加えると正面方向に力を加える事ができます。
「勢いよく前に飛ばす」等ができる。


SetPosition() / SetLocalPosition()

引数:vector3
VCIの現在地をVector3で指定した値に変更します。
Position()の場合、Unityの原点(0,0,0)が基準になり、LocalPosition()の場合はVCIを出現させた位置が原点として扱われます。

位置や回転をSetする場合、SubItemに力が加わっているとSetメソッドで指定した値にした後すぐ力が加わる計算が入るので、意図した結果にならない事があります。
なので、Setメソッドを呼んだ後にSetVelocity(0,0,0) で加わっている力を0にするのがよいです。

順番はSetPosition()の後にSetVelocity(0,0,0)です。
(逆だと力が0になった後でSetPosition()で力が加わる可能性があります)


SetRotation() / SetLocalRotation()

引数:Quaternion
VCIの姿勢(回転)をQuternionで指定した値に変更します。
Rotation()の場合、Unity全体が基準の回転(Z+が正面)となり、LocalRotation()の場合はVCIを出現させた時の方向を基準とした回転として扱われます。

位置や回転をSetする場合、SubItemに力が加わっているとSetメソッドで指定した値にした後すぐ力が加わる計算が入るので、意図した結果にならない事があります。
なので、Setメソッドを呼んだ後にSetVelocity(0,0,0) で加わっている力を0にするのがよいです。

順番はSetPosition()の後にSetVelocity(0,0,0)です。
(逆だと力が0になった後でSetPosition()で力が加わる可能性があります)


SetLocalScale()

引数:vector3
VCIの縮尺をVector3で指定した値に変更します。

スケールが変更可能なSubItemのスケジュールを変える場合、1度GetLocalScale()で取得した値に対して、目的の倍率を掛けた後にSetLocalScale()とする事で「現在の大きさを基準したscaleの変更」をする事ができます。


SetVelocity()

引数:vector3
VCIに加わってる力を指定したVector3に変更します。

下記サンプルは掴んだ時に subitem の名前のオブジェクトがZ方向に移動します。
実行された直後にVelocityの値を持った状態になります。
Vector3.zero をセットすると、物理演算による運動を無くす事ができます。

サンプル

main.lua
item = vci.assets.GetSubItem("subitem")
function onGrab()
    local velocity = Vector3.__new(0, 0, 10)
    print(velocity)
    item.SetVelocity(velocity)
end

SetAngularVelocity()

引数:vector3
Vector3を基準とした回転する力がVCIに加わります。

下記サンプルは掴んだ時に subitem の名前のオブジェクトにvelocityが加わった場合の回転の力が加わります。

サンプル

main.lua
item = vci.assets.GetSubItem("subitem")
function onGrab()
    local velocity = Vector3.__new(10, 0, 0)
    print(velocity)
    item.SetAngularVelocity(velocity)
end

AddForce()

引数:vector3
Vector3の方向に向かって力が加わります。

下記サンプルは掴んだ時に subitem の名前のオブジェクトがZ方向に移動します。
AddForceなので、加速度があるような感じで少しづつ力が加わります。

サンプル

main.lua
item = vci.assets.GetSubItem("subitem")
function onGrab()
    local force = Vector3.__new(0, 0, 10)
    print(force)
    item.AddForce(force)
end
vci/script/reference/exporttransform.txt · 最終更新: 2019/08/28 17:51 by navana

ページ用ツール