この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
vci:script:reference:exporttransform [2021/11/17 21:14] numa |
vci:script:reference:exporttransform [2023/08/28 19:07] (現在) pastatto 統合リンク修正 |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
+ | ~~NOTOC~~ | ||
====== ExportTransform ====== | ====== ExportTransform ====== | ||
+ | <WRAP center round important 80%> | ||
- | ExportTransformクラスはTransformやRigidbodyに干渉する事のできるクラスです。\\ | + | このページは過去の情報となります。\\ |
- | VCIの移動、回転、縮尺の変更や、力を与えて回転させたり、吹き飛ばしたりする事ができます。\\ | + | 新しいスクリプトリファレンスは**[[https://developer.virtualcast.jp/vci-docs/api/|こちら]]**になります。 |
+ | </WRAP> | ||
+ | ExportTransformクラスはVCIのオブジェクトを扱うクラスです。\\ | ||
+ | オブジェクトはUnityのTransformに対応し、加えてRigidbodyやSubItemの操作も含まれます。\\ | ||
+ | たとえば移動、回転、縮尺の変更や、力を与えて回転させたり、吹き飛ばしたりする事ができます。 | ||
- | ===== メンバ変数・関数一覧 ===== | + | ^ ExportAssets ^^^ |
+ | ^ 名前 ^ 説明 ^ バージョン ^ | ||
+ | | [[vci/script/reference/exporttransform#GetTransform | GetTransform]] | VCI内のTransformを取得 | | | ||
+ | ^ ExportTransform ^^^ | ||
+ | ^ 名前 ^ 説明 ^ バージョン ^ | ||
+ | | [[vci/script/reference/exporttransform#GetName]] | Transformの名前を取得 | | | ||
+ | | [[vci/script/reference/exporttransform#GetPosition / GetLocalPosition]] | Transformの位置を取得| | | ||
+ | | [[vci/script/reference/exporttransform#GetRotation / GetLocalRotation]] | Transformの回転を取得| | | ||
+ | | [[vci/script/reference/exporttransform#GetLocalScale]] | Transformの縮尺を取得 | | | ||
+ | | [[vci/script/reference/exporttransform#GetVelocity]] | Rigidbodyの速度をVector3として取得 | | | ||
+ | | [[vci/script/reference/exporttransform#GetAngularVelocity]] | Rigidbodyの角速度をVector3として取得 | | | ||
+ | | [[vci/script/reference/exporttransform#GetForward / GetRight / GetUp]] | Transformを基準に前・右・上のVector3を取得 | | | ||
+ | | [[vci/script/reference/exporttransform#GetLocalToWorldMatrix]] | ローカル→ワールド座標に変換した時の行列 | | | ||
+ | | [[vci/script/reference/exporttransform#GetAttractable]] | SubItemが引き寄せ可能かどうか | | | ||
+ | | [[vci/script/reference/exporttransform#SetPosition / SetLocalPosition]] | Transformの位置をVector3で変更 | | | ||
+ | | [[vci/script/reference/exporttransform#SetRotation / SetLocalRotation ]] | Transformの回転をQuaternionで変更 | | | ||
+ | | [[vci/script/reference/exporttransform#SetLocalScale]] | Transformの縮尺をVector3で変更 | | | ||
+ | | [[vci/script/reference/exporttransform#SetVelocity ]] | Rigidbodyに加わっている力をVector3で変更 | | | ||
+ | | [[vci/script/reference/exporttransform#SetAngularVelocity ]] | Rigidbodyに加わってる回転をVector3で変更 | | | ||
+ | | [[vci/script/reference/exporttransform#AddForce]] | 指定したForceModeでRigidbodyに力を付与 | v2.2.1a以降 | | ||
+ | | [[vci/script/reference/exporttransform#SetAttractable]] | SubItemの引き寄せを設定 | | | ||
+ | | [[vci/script/reference/exporttransform#IsMine]] | SubItemの所有者かどうか | | | ||
+ | | [[vci/script/reference/exporttransform#IsSubItem]] | SubItemかどうか | | | ||
+ | | [[vci/script/reference/exporttransform#SetActive / ActiveSelf / ActiveInHierarchy ]] | Transform 自身の有効無効設定を設定 | v2.0.1a以降 | | ||
+ | ^ 他のクラスで使用 ^^^ | ||
+ | ^ 名前 ^ 説明 ^ バージョン ^ | ||
+ | | GetAnimation | [[vci:script:reference:exportanimation|ExportAnimation]]を使用 | | | ||
+ | | GetAudioSources | [[vci:script:reference:exportaudiosource|ExportAudioSource]]を使用 | v2.0.3b以降 | | ||
- | ** [EmbeddedScriptWorkspace]フォルダ内の[types.lua]を開くと一覧を確認できます。** | + | ExportTransformクラスを使うには ''local transform = vci.assets.GetTransform("SubItemName") '' のようにTransformの名前を指定してインスタンス化します。\\ |
- | + | その後、 ''transform.各関数()'' と各関数を実行できます。 | |
- | **表記の省略の為、''Vector3型'' は ''Vec3''、''number型'' は ''num'' と表記してあります。**\\ | + | |
- | **引数は ''()'' の中に、戻り値の型は '':(セミコロン)'' の後に表記してあります。**\\ | + | |
- | + | ||
- | ---- | + | |
- | + | ||
- | ^ 名前 ^ 説明 ^ VCバージョン ^ | + | |
- | | [[vci/script/reference/exporttransform#GetName | GetName fun(): string]] | Subitemの名前を取得できます | | | + | |
- | | [[vci/script/reference/exporttransform#GetPosition() / GetLocalPosition() | GetLocalPosition fun(): Vec3]] | SubitemのPositionを取得できます\\ (Subitemローカル) | | | + | |
- | | [[vci/script/reference/exporttransform#GetPosition() / GetLocalPosition() | GetPosition fun(): Vec3]] | SubitemのPositionを取得できます | | | + | |
- | | [[vci/script/reference/exporttransform#GetRotation() / GetLocalRotation() | GetLocalRotation fun(): Quaternion]] | SubitemのRotationを取得できます\\ (Subitemローカル) | | | + | |
- | | [[vci/script/reference/exporttransform#GetRotation() / GetLocalRotation() | GetRotation fun(): Quaternion]] | SubitemのRotationを取得できます | | | + | |
- | | [[vci/script/reference/exporttransform#GetLocalScale() | GetLocalScale fun(): Vec3]] | Subitemのscaleを取得できます | | | + | |
- | | GetRight fun(): Vec3 | Subitemを基準にした右方向(X軸プラス)のベクトルを取得できます | | | + | |
- | | GetUp fun(): Vec3 | Subitemを基準にした上方向(Y軸プラス)のベクトルを取得できます | | | + | |
- | | [[vci/script/reference/exporttransform#GetForward() | GetForward fun(): Vec3]] | Subitemを基準にした正面方向(Z軸プラス)のベクトルを取得できます | | | + | |
- | | GetLocalToWorldMatrix fun(): Matrix4x4 | ローカル座標からワールド座標に変換した時の行列 | | | + | |
- | | GetAttractable fun(): bool | | | | + | |
- | | GetAnimation fun(): ExportAnimation | [[vci:script:reference:exportanimation|ExportAnimation]]を使用するのに使います | | + | |
- | | GetAudioSources fun(): ExportAudioSource[] | [[vci:script:reference:exportaudiosource|ExportAudioSource]]を使用するのに使います\\ 対象のExportTransformが表すGameObjectにアタッチされているすべてのAudioSourceを返します | v2.0.3b以降 | | + | |
- | | [[vci/script/reference/exporttransform#IsMine | IsMine bool]] | SubItemの所有者の場合 true を返し、そうでなければ nil を返します | | | + | |
- | | IsSubItem bool | SubItemの場合は true を返し、そうでなければ false を返します | | | + | |
- | | [[vci/script/reference/exporttransform#SetActive() / ActiveSelf / ActiveInHierarchy | ActiveInHierarchy bool]] | | | | + | |
- | | [[vci/script/reference/exporttransform#SetActive() / ActiveSelf / ActiveInHierarchy | ActiveSelf bool]] | Transform 自身の有効無効設定を取得します | v2.0.1a以降 | | + | |
- | | [[vci/script/reference/exporttransform#SetPosition() / SetLocalPosition() | SetPosition fun(position: Vec3)]] | SubitemのPositionの値をVec3で指定した値に変更します | | | + | |
- | | [[vci/script/reference/exporttransform#SetPosition() / SetLocalPosition() | SetLocalPosition fun(localPosition: Vec3)]] | SubitemのPositionの値をVec3で指定した値に変更します | | | + | |
- | | [[vci/script/reference/exporttransform#SetRotation() / SetLocalRotation() | SetRotation fun(rotation: Quaternion)]] | SubitemのRotationの値をQuaternionで指定した値に変更します | | | + | |
- | | [[vci/script/reference/exporttransform#SetRotation() / SetLocalRotation() | SetLocalRotation fun(localRotation: Quaternion)]] | SubitemのRotationの値をQuaternionで指定した値に変更します | | | + | |
- | | [[vci/script/reference/exporttransform#SetLocalScale() | SetLocalScale fun(localScale: Vec3)]] | Subitemのscaleの値をVec3で指定した値に変更します | | | + | |
- | | [[vci/script/reference/exporttransform#SetVelocity() | SetVelocity fun(velocity: Vec3)]] | Subitemに加わっている力をVec3で指定した値に変更します | | | + | |
- | | [[vci/script/reference/exporttransform#SetAngularVelocity() | SetAngularVelocity fun(angularVelocity: Vec3)]] | Subitemに加わってる回転をVec3で押した方向に変更します | | | + | |
- | | [[vci/script/reference/exporttransform#AddForce() | AddForce fun(force: Vec3)]] | Vec3で指定した値の力をSubitemに与えます | | | + | |
- | | [[vci/script/reference/exporttransform#SetActive() / ActiveSelf / ActiveInHierarchy | SetActive fun(isActive: bool)]] | Transform 自身の有効無効設定を設定します(非同期) | v2.0.1a以降 | | + | |
- | | [[vci/script/reference/exporttransform#SetActive() / ActiveSelf / ActiveInHierarchy | _ALL_SetActive fun(isActive: bool)]] | Transform 自身の有効無効設定を設定します(全員へ同期) | v2.0.1a以降 | | + | |
- | + | ||
- | ** 装着アイテム関連 ** | + | |
- | + | ||
- | | 名前 | 説明 | VCバージョン | | + | |
- | | [[vci/script/reference/exporttransform#装着アイテム操作 | IsAttached bool]] | 装着されている場合に true を返します | 1.9.2a以降 | | + | |
- | | [[vci/script/reference/exporttransform#装着アイテム操作 | AttachableDistance number]] | 装着可能な距離を返します | 1.9.2a以降 | | + | |
- | | AttachableHumanBodyBones usertype | 装着可能なボーン名一覧をtableで返します | 1.9.2a以降 | | + | |
- | | [[vci/script/reference/exporttransform#装着アイテム操作 | AttachToAvatar fun()]] | 装着可能な場合に、装着を試みます | 1.9.2a以降 | | + | |
- | | [[vci/script/reference/exporttransform#装着アイテム操作 | DetachFromAvatar fun()]] | 装着している場合に、脱着します | 1.9.2a以降 | | + | |
- | | SetAttractable fun(value: bool) | | | | + | |
- | + | ||
- | ExportTransformクラスを使うには ''Subitem = vci.assets.GetSubItem("Subitem") '' という風にSubitemを名前で指定してインスタンス化します。\\ | + | |
- | その後、 ''Subitem.各メソッド()'' という風に実行してゆきます。 | + | |
===== VCIの同期について ===== | ===== VCIの同期について ===== | ||
ライン 63: | ライン 50: | ||
* transformはバーチャルキャストの機能によって同期します。\\ | * transformはバーチャルキャストの機能によって同期します。\\ | ||
- | * ''_ALL_'' のついたメソッドは同期して実行されます。\\ | + | * ''_ALL_'' のついた関数は同期して実行されます。\\ |
* [[vci/script/reference/syncvariable|同期変数]]を使用してVCIの状態を同期させます。\\ | * [[vci/script/reference/syncvariable|同期変数]]を使用してVCIの状態を同期させます。\\ | ||
ライン 69: | ライン 56: | ||
詳細なtransformの同期については [[vci:component:sdk:subitem:owned|VCIアイテムとSubItemについて]] をご確認ください。 | 詳細なtransformの同期については [[vci:component:sdk:subitem:owned|VCIアイテムとSubItemについて]] をご確認ください。 | ||
- | ===== GetTransform() ===== | + | ===== GetTransform ===== |
+ | <wrap em>ExportAssets</wrap>**.GetTransform fun(name: string): [[vci:script:reference:exporttransform|ExportTransform]]** | ||
- | サンプル\\ | + | VCI 内のオブジェクトを取得します。 \\ |
+ | 引数 ''name'' に取得したいオブジェクト名を入れると、該当オブジェクトの ''ExportTransform'' を取得します。\\ | ||
+ | 指定した名前のオブジェクトが存在しない場合、 ''nil'' が返ります。 | ||
+ | |||
+ | 取得した ''ExportTransform'' の関数を使用する事により、 transform の値の取得や変更を行う事ができます。\\ | ||
+ | (詳しくは [[vci:script:reference:exporttransform|ExportTransform]] を参照してください) | ||
+ | |||
+ | **(バーチャルキャスト 2.3.1a 以降)** | ||
+ | |||
+ | 引数 ''name'' が ''/'' から始まる文字列の場合、 ''name'' を VCIObject から見たパスとして検索し、該当パスにオブジェクトがあった場合はそのオブジェクトの ''ExportTransform'' を取得します。 \\ | ||
+ | 該当パスのオブジェクトが存在しない場合は、従来通り ''name'' 全体をオブジェクト名として検索します。 | ||
+ | |||
+ | |||
+ | === サンプル === | ||
<file lua main.lua> | <file lua main.lua> | ||
--ExportTransform | --ExportTransform | ||
- | --オブジェクト名は「SubItem」 | + | --SubItem のオブジェクト名は「SubItem」 |
- | SubItem = vci.assets.GetTransform("SubItem") | + | local SubItem = vci.assets.GetTransform("SubItem") |
- | print(SubItem.GetName()) | + | print("Name: " .. SubItem.GetName()) |
- | print(SubItem.ToString()) | + | print("Position: " .. SubItem.GetPosition().ToString()) |
+ | print("LocalPosition: " .. SubItem.GetLocalPosition().ToString()) | ||
+ | print("Rotation: " .. SubItem.GetRotation().ToString()) | ||
+ | print("LocalRotation: " .. SubItem.GetLocalRotation().ToString()) | ||
+ | print("LocalScale: " .. SubItem.GetLocalScale().ToString()) | ||
+ | print("Forward: " .. SubItem.GetForward().ToString()) | ||
</file> | </file> | ||
- | \\ | + | |
- | 実行結果\\ | + | === 実行結果 === |
<code> | <code> | ||
- | SubItem | + | Name: SubItem |
- | VCIEmbedded.LuaMoonSharp.ExportTransform | + | Position: (0.00, 1.00, 0.00) |
+ | LocalPosition: (0.00, 0.00, 0.00) | ||
+ | Rotation: (0.00000, 0.70711, 0.00000, 0.70711) | ||
+ | LocalRotation: (0.00000, 0.00000, 0.00000, 1.00000) | ||
+ | LocalScale: (1.00, 1.00, 1.00) | ||
+ | Forward: (1.00, 0.00, 0.00) | ||
</code> | </code> | ||
- | ''vci.assets.GetTransform()'' の引数にオブジェクト名を入れると、\\ | + | \\ |
- | 引数にしたオブジェクトのExportTransformをインスタンス化する事ができます。\\ | + | |
- | インスタンス化したExportTransformのメソッドを使用する事により、transformの値を変更したり取得する事ができます。\\ | + | |
+ | === サンプル2 パス指定での取得(バーチャルキャスト 2.3.1a 以降) === | ||
+ | |||
+ | 以下のような構造の VCI の場合 | ||
+ | |||
+ | {{:vci:script:reference:gettransform_sample_2.png|}} | ||
- | サンプル2\\ | ||
<file lua main.lua> | <file lua main.lua> | ||
- | --ExportTransform | + | local shhere_1 = vci.assets.GetTransform("/SubItem1/Sphere") |
- | --SubItemに設定してるオブジェクト名は「SubItem」 | + | print(shhere_1.GetName()) |
- | Item = vci.assets.GetTransform("Item ") | + | print(shhere_1.GetPosition()) |
- | print(Item.GetPosition()) | + | local shhere_2 = vci.assets.GetTransform("/SubItem2/Sphere") |
- | print(Item.GetLocalPosition()) | + | print(shhere_2.GetName()) |
- | print(Item.GetRotation()) | + | print(shhere_2.GetPosition()) |
- | print(Item.GetLocalRotation()) | + | |
- | print(Item.GetLocalScale()) | + | |
- | print(Item.GetForward()) | + | |
</file> | </file> | ||
- | \\ | + | |
- | 実行結果\\ | + | === 実行結果 === |
<code> | <code> | ||
- | (0.0, 1.2, 0.0) | + | Sphere |
- | (0.0, 1.2, 0.0) | + | (1.00, 2.50, 0.00) |
- | (0.0, 0.0, 0.0, 1.0) | + | Sphere |
- | (0.0, 0.0, 0.0, 1.0) | + | (2.00, 1.00, 0.00) |
- | (1.0, 1.0, 1.0) | + | |
- | (0.0, 0.0, 1.0) | + | |
</code> | </code> | ||
==== 複数のsubItemをfor文で宣言する ==== | ==== 複数のsubItemをfor文で宣言する ==== | ||
+ | SubItemの名前を ''Item1'' ''Item2'' ''Item3'' という風に連番で命名します。\\ | ||
+ | そしたら for文を使って1からの連番で ''GetTransform()'' する事ができます。\\ | ||
+ | ※iは ''tostring(i)'' で文字列に変換できます。 | ||
+ | |||
+ | === サンプル === | ||
<file lua main.lua> | <file lua main.lua> | ||
-- テーブルをfor文で宣言する | -- テーブルをfor文で宣言する | ||
ライン 127: | ライン 143: | ||
</file> | </file> | ||
- | SubItemの名前を ''Item1'' ''Item2'' ''Item3'' という風に連番で命名します。\\ | ||
- | そしたら for文を使って1からの連番で ''GetTransform()'' する事ができます。\\ | ||
- | ※iは ''tostring(i)'' で文字列に変換できます。 | ||
- | ===== IsMine ===== | ||
- | サンプル\\ | ||
- | <file lua main.lua> | ||
- | item = vci.assets.GetTransform('SubItem') | ||
- | |||
- | function updateAll() -- 所有権に関係なく全ユーザーが十個する | ||
- | if item.IsMine then -- SubItemの所有者の場合 true | ||
- | item.SetPosition(Vector3.__new(1, 2, 3)) | ||
- | end | ||
- | end | ||
- | </file> | ||
- | SubItemの所有者の場合だけ処理したい場合などに使用します。\\ | + | ===== GetName ===== |
- | 所有権については [[vci:script:reference:eventfunction:ownership|所有権とイベント関数の関係]] を参考にしてください。\\ | + | <wrap em>ExportTransform</wrap>**GetName fun(): string**\\ |
+ | VCIのオブジェクト名を取得できます。 | ||
+ | |||
+ | === 戻り値 === | ||
+ | string | ||
- | ===== GetName() ===== | + | === サンプル === |
<file lua main.lua> | <file lua main.lua> | ||
- | local cube = vci.assets.GetSubItem("TestCube") | + | local cube = vci.assets.GetTransform("TestCube") |
function onUse(use) | function onUse(use) | ||
ライン 156: | ライン 162: | ||
end | end | ||
</file> | </file> | ||
- | \\ | + | |
- | 実行結果\\ | + | === 実行結果 === |
<code> | <code> | ||
"TestCube" | "TestCube" | ||
</code> | </code> | ||
- | **戻り値:string**\\ | ||
- | VCIのオブジェクト名を取得できます。 | ||
- | ===== GetPosition() / GetLocalPosition() ===== | + | |
+ | |||
+ | ===== GetPosition / GetLocalPosition ===== | ||
+ | **GetPosition fun(): Vector3**\\ | ||
+ | **GetLocalPosition fun(): Vector3**\\ | ||
+ | Transformの現在地を取得できます。\\ | ||
+ | Position()の場合、Unityの原点(0,0,0)が基準になり、LocalPosition()の場合はVCIを出現させた位置が原点として扱われます。 | ||
+ | |||
+ | === 戻り値 === | ||
+ | Vector3 | ||
+ | |||
+ | === サンプル === | ||
<file lua main.lua> | <file lua main.lua> | ||
- | local cube = vci.assets.GetSubItem("TestCube") | + | local cube = vci.assets.GetTransform("TestCube") |
function onUse(use) | function onUse(use) | ||
ライン 173: | ライン 188: | ||
end | end | ||
</file> | </file> | ||
- | \\ | + | |
- | 実行結果\\ | + | === 実行結果 === |
<code> | <code> | ||
(0.0, 1.2, 0.0) | (0.0, 1.2, 0.0) | ||
</code> | </code> | ||
- | **戻り値:Vector3**\\ | ||
- | Subitemの現在地を取得できます。\\ | ||
- | Position()の場合、Unityの原点(0,0,0)が基準になり、LocalPosition()の場合はVCIを出現させた位置が原点として扱われます。 | ||
- | ===== GetRotation() / GetLocalRotation() ===== | + | |
+ | ===== GetRotation / GetLocalRotation ===== | ||
+ | **GetRotation fun(): Quaternion**\\ | ||
+ | **GetLocalRotation fun(): Quaternion**\\ | ||
+ | Transformの回転(Quaternion)を取得できます。\\ | ||
+ | [[https://blog.virtualcast.jp/blog/2019/11/quaternion/ | Quaternionとは]] | ||
+ | Rotation()の場合、Unity全体が基準の回転(Z+が正面)となり、LocalRotation()の場合はVCIを出現させた時の方向を基準とした回転として扱われます。\\ | ||
+ | ''SetRotation(Quaternion.identity)'' UnityのZ+が正面方向として、姿勢を変更できます。 | ||
+ | |||
+ | === 戻り値 === | ||
+ | Quaternion | ||
+ | |||
+ | === サンプル === | ||
<file lua main.lua> | <file lua main.lua> | ||
- | local cube = vci.assets.GetSubItem("TestCube") | + | local cube = vci.assets.GetTransform("TestCube") |
function onUse(use) | function onUse(use) | ||
ライン 191: | ライン 215: | ||
end | end | ||
</file> | </file> | ||
- | \\ | + | |
- | 実行結果\\ | + | === 実行結果 === |
<code> | <code> | ||
(-0.5, 0.5, 0.5, 0.5) | (-0.5, 0.5, 0.5, 0.5) | ||
</code> | </code> | ||
- | **戻り値:Quaternion**\\ | ||
- | Subitemの回転(Quaternion)を取得できます。\\ | ||
- | [[https://virtualcast.jp/blog/2019/11/quaternion/ | Quaternionとは]] | ||
- | Rotation()の場合、Unity全体が基準の回転(Z+が正面)となり、LocalRotation()の場合はVCIを出現させた時の方向を基準とした回転として扱われます。\\ | ||
- | ''SetRotation(Quaternion.identity)'' UnityのZ+が正面方向として、姿勢を変更できます。 | ||
- | ===== GetLocalScale() ===== | + | |
+ | |||
+ | ===== GetLocalScale ===== | ||
+ | **GetLocalScale fun(): Vector3**\\ | ||
+ | Transformの縮尺を取得できます。\\ | ||
+ | \\ | ||
+ | スケールが変更可能なTransformのスケジュールを変える場合、1度GetLocalScale()で取得した値に対して、目的の倍率を掛けた後にSetLocalScale()とする事で「現在の大きさを基準したscaleの変更」をする事ができます。\\ | ||
+ | (SetLocalScale()のみだと、現在の大きさを考慮しないスケールの変更となる) | ||
+ | |||
+ | === 戻り値 === | ||
+ | Vector3 | ||
+ | |||
+ | === サンプル === | ||
<file lua main.lua> | <file lua main.lua> | ||
- | local cube = vci.assets.GetSubItem("TestCube") | + | local cube = vci.assets.GetTransform("TestCube") |
function onUse(use) | function onUse(use) | ||
ライン 211: | ライン 242: | ||
end | end | ||
</file> | </file> | ||
- | \\ | + | |
- | 実行結果\\ | + | === 実行結果 === |
<code> | <code> | ||
(1.0, 1.0, 1.0, 1.0) | (1.0, 1.0, 1.0, 1.0) | ||
</code> | </code> | ||
- | **戻り値:Vector3**\\ | ||
- | SubItemの縮尺を取得できます。\\ | ||
- | \\ | ||
- | スケールが変更可能なSubItemのスケジュールを変える場合、1度GetLocalScale()で取得した値に対して、目的の倍率を掛けた後にSetLocalScale()とする事で「現在の大きさを基準したscaleの変更」をする事ができます。\\ | ||
- | (SetLocalScale()のみだと、現在の大きさを考慮しないスケールの変更となる) | ||
- | ===== GetForward() ===== | ||
- | <file lua main.lua> | ||
- | local cube = vci.assets.GetSubItem("TestCube") | ||
- | function onUse(use) | + | |
- | local cubeForward = cube.GetForward() | + | ===== GetVelocity ===== |
- | print(cubeForward) | + | **GetVelocity fun(): Vector3**\\ |
- | cube.AddForce(cubeForward * 1000) | + | Transformの速度をベクトルとして取得します。\\ |
+ | サンプルはSubItemをUseした時に、そのVCIの速度を取得し、ログに表示します。 | ||
+ | |||
+ | === 引数 === | ||
+ | Vector3 | ||
+ | |||
+ | |||
+ | === サンプル === | ||
+ | <file lua main.lua> | ||
+ | item = vci.assets.GetTransform("subitem") | ||
+ | function onGrab() | ||
+ | local velocity = item.GetVelocity() | ||
+ | print(velocity) | ||
end | end | ||
</file> | </file> | ||
- | \\ | ||
- | 実行結果\\ | ||
- | <code> | ||
- | cubeが向いてる方向に飛ぶ。cubeを離した状態でuseする必要がある。 | ||
- | </code> | ||
- | **戻り値:Vector3**\\ | ||
- | SubItemが現在向いてる前方向のベクトルを取得できます。\\ | ||
- | (サブアイテムを基準にしたZ軸プラスのベクトル)\\ | ||
- | \\ | ||
- | 用途としては…GetForward()でオブジェクトの正面方向のベクトルを取得し、onUngrab()(SubItemを話した時)に正面方向のベクトルを使って AddForce()で力を加えると正面方向に力を加える事ができます。\\ | ||
- | 「勢いよく前に飛ばす」等ができる。 | ||
- | ===== GetAngularVelocity() ===== | + | ===== GetAngularVelocity ===== |
- | **戻り値:Vector3**\\ | + | **GetAngularVelocity fun(): Vector3**\\ |
- | SubItemの角速度を、ラジアン/秒で表されるベクトルで取得します。\\ | + | Transformの角速度を、ラジアン/秒で表されるベクトルで取得します。\\ |
- | \\ | + | サンプルは、SubItemをUseした時に角速度を取得してログに出力します。 |
- | 下記サンプルは、SubItemをUseした時に角速度を取得してログに出力します。\\ | + | |
+ | === 戻り値 === | ||
+ | Vector3 | ||
+ | === サンプル === | ||
<file lua main.lua> | <file lua main.lua> | ||
- | local cube = vci.assets.GetSubItem("TestCube") | + | local cube = vci.assets.GetTransform("TestCube") |
function onUse(use) | function onUse(use) | ||
ライン 260: | ライン 287: | ||
- | ===== GetVelocity() ===== | ||
- | **引数:Vector3**\\ | + | ===== GetForward / GetRight / GetUp ===== |
- | VCIの速度をベクトルとして取得します。\\ | + | **GetForward fun(): Vector3**\\ |
+ | **GetRight fun(): Vector3**\\ | ||
+ | **GetUp fun(): Vector3**\\ | ||
+ | Transformが現在向いてる前方向のベクトルを取得できます。\\ | ||
+ | (Transformを基準にしたZ軸プラスのベクトル)\\ | ||
\\ | \\ | ||
- | 下記サンプルはSubItemをUseした時に、そのVCIの速度を取得し、ログに表示します。\\ | + | 用途としては…GetForward()でオブジェクトの正面方向のベクトルを取得し、onUngrab()(SubItemを離した時)に正面方向のベクトルを使って AddForce()で力を加えると正面方向に力を加える事ができます。\\ |
+ | 「勢いよく前に飛ばす」等ができる。 | ||
- | サンプル\\ | + | === 戻り値 === |
+ | Vector3 | ||
+ | |||
+ | === サンプル === | ||
<file lua main.lua> | <file lua main.lua> | ||
- | item = vci.assets.GetSubItem("subitem") | + | local cube = vci.assets.GetTransform("subitem") |
- | function onGrab() | + | |
- | local velocity = item.GetVelocity() | + | function onUse(use) |
- | print(velocity) | + | local cubeForward = cube.GetForward() |
+ | print(cubeForward) | ||
+ | cube.AddForce(cubeForward * 1000) | ||
end | end | ||
</file> | </file> | ||
- | ===== SetPosition() / SetLocalPosition() ===== | + | === 実行結果 === |
+ | <code> | ||
+ | cubeが向いてる方向に飛ぶ。cubeを離した状態でuseする必要がある。 | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ===== GetLocalToWorldMatrix ===== | ||
+ | **GetLocalToWorldMatrix fun(): Matrix4x4**\\ | ||
+ | ローカル座標からワールド座標に変換した時の行列です。 | ||
+ | |||
+ | ===== GetAttractable ===== | ||
+ | **GetAttractable fun(): boolean** | ||
+ | |||
+ | SubItemが引き寄せ可能かどうかを返します。 | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== SetPosition / SetLocalPosition ===== | ||
+ | **SetPosition fun(position: Vector3):**\\ | ||
+ | **SetLocalPosition fun(localPosition: Vector3):**\\ | ||
+ | VCIの現在地をVector3で指定した値に変更します。\\ | ||
+ | Position()の場合、Unityの原点(0,0,0)が基準になり、LocalPosition()の場合はVCIを出現させた位置が原点として扱われます。\\ | ||
+ | \\ | ||
+ | 位置や回転をSetする場合、Transformに力が加わっているとSet関数で指定した値にした後すぐ力が加わる計算が入るので、意図した結果にならない事があります。\\ | ||
+ | なので、Set関数を呼んだ後にSetVelocity(0,0,0) で加わっている力を0にするのがよいです。\\ | ||
+ | \\ | ||
+ | 順番はSetPosition()の後にSetVelocity(0,0,0)です。\\ | ||
+ | (逆だと力が0になった後でSetPosition()で力が加わる可能性があります) | ||
+ | |||
+ | === 引数 === | ||
+ | vector3 | ||
+ | |||
+ | === サンプル === | ||
<file lua main.lua> | <file lua main.lua> | ||
- | local cube = vci.assets.GetSubItem("TestCube") | + | local cube = vci.assets.GetTransform("TestCube") |
function onUse(use) | function onUse(use) | ||
ライン 289: | ライン 360: | ||
end | end | ||
</file> | </file> | ||
- | \\ | + | |
- | 実行結果\\ | + | === 実行結果 === |
<code> | <code> | ||
(0.0, 1.0, 0.0) | (0.0, 1.0, 0.0) | ||
ライン 296: | ライン 367: | ||
Z軸方向に1移動して止まります。 | Z軸方向に1移動して止まります。 | ||
</code> | </code> | ||
- | **引数:vector3**\\ | + | |
- | VCIの現在地をVector3で指定した値に変更します。\\ | + | |
- | Position()の場合、Unityの原点(0,0,0)が基準になり、LocalPosition()の場合はVCIを出現させた位置が原点として扱われます。\\ | + | ===== SetRotation / SetLocalRotation ===== |
+ | **SetRotation fun(rotation: Quaternion):**\\ | ||
+ | **SetLocalRotation fun(localRotation: Quaternion):**\\ | ||
+ | VCIの姿勢(回転)をQuternionで指定した値に変更します。\\ | ||
+ | Rotation()の場合、Unity全体が基準の回転(Z+が正面)となり、LocalRotation()の場合はVCIを出現させた時の方向を基準とした回転として扱われます。\\ | ||
\\ | \\ | ||
- | 位置や回転をSetする場合、SubItemに力が加わっているとSetメソッドで指定した値にした後すぐ力が加わる計算が入るので、意図した結果にならない事があります。\\ | + | 位置や回転をSetする場合、Transformに力が加わっているとSet関数で指定した値にした後すぐ力が加わる計算が入るので、意図した結果にならない事があります。\\ |
- | なので、Setメソッドを呼んだ後にSetVelocity(0,0,0) で加わっている力を0にするのがよいです。\\ | + | なので、Set関数を呼んだ後にSetVelocity(0,0,0) で加わっている力を0にするのがよいです。\\ |
\\ | \\ | ||
順番はSetPosition()の後にSetVelocity(0,0,0)です。\\ | 順番はSetPosition()の後にSetVelocity(0,0,0)です。\\ | ||
(逆だと力が0になった後でSetPosition()で力が加わる可能性があります) | (逆だと力が0になった後でSetPosition()で力が加わる可能性があります) | ||
- | ===== SetRotation() / SetLocalRotation() ===== | + | === 引数 === |
+ | Quaternion | ||
+ | |||
+ | === サンプル === | ||
<file lua main.lua> | <file lua main.lua> | ||
- | local cube = vci.assets.GetSubItem("TestCube") | + | local cube = vci.assets.GetTransform("TestCube") |
- | local subCube = vci.assets.GetSubItem("TestCube2") | + | local subCube = vci.assets.GetTransform("TestCube2") |
function onUse(use) | function onUse(use) | ||
ライン 320: | ライン 398: | ||
</file> | </file> | ||
- | \\ | + | |
- | 実行結果\\ | + | === 実行結果 === |
<code> | <code> | ||
subCubeの角度がCubeと等しくなります。 | subCubeの角度がCubeと等しくなります。 | ||
</code> | </code> | ||
- | **引数:Quaternion**\\ | + | |
- | VCIの姿勢(回転)をQuternionで指定した値に変更します。\\ | + | |
- | Rotation()の場合、Unity全体が基準の回転(Z+が正面)となり、LocalRotation()の場合はVCIを出現させた時の方向を基準とした回転として扱われます。\\ | + | |
+ | ===== SetLocalScale ===== | ||
+ | **SetLocalScale fun(localScale: Vector3):**\\ | ||
+ | VCIの縮尺をVector3で指定した値に変更します。\\ | ||
\\ | \\ | ||
- | 位置や回転をSetする場合、SubItemに力が加わっているとSetメソッドで指定した値にした後すぐ力が加わる計算が入るので、意図した結果にならない事があります。\\ | + | スケールが変更可能なTransformのスケジュールを変える場合、1度GetLocalScale()で取得した値に対して、目的の倍率を掛けた後にSetLocalScale()とする事で「現在の大きさを基準したscaleの変更」をする事ができます。 |
- | なので、Setメソッドを呼んだ後にSetVelocity(0,0,0) で加わっている力を0にするのがよいです。\\ | + | |
- | \\ | + | |
- | 順番はSetPosition()の後にSetVelocity(0,0,0)です。\\ | + | |
- | (逆だと力が0になった後でSetPosition()で力が加わる可能性があります) | + | |
- | ===== SetLocalScale() ===== | + | |
+ | === サンプル === | ||
<file lua main.lua> | <file lua main.lua> | ||
- | local cube = vci.assets.GetSubItem("TestCube") | + | local cube = vci.assets.GetTransform("TestCube") |
function onUse(use) | function onUse(use) | ||
ライン 346: | ライン 424: | ||
end | end | ||
</file> | </file> | ||
- | \\ | + | |
- | 実行結果\\ | + | === 実行結果 === |
<code> | <code> | ||
(4回use) | (4回use) | ||
ライン 355: | ライン 433: | ||
(3.4, 3.4, 3.4) | (3.4, 3.4, 3.4) | ||
</code> | </code> | ||
- | **引数:vector3**\\ | ||
- | VCIの縮尺をVector3で指定した値に変更します。\\ | ||
- | \\ | ||
- | スケールが変更可能なSubItemのスケジュールを変える場合、1度GetLocalScale()で取得した値に対して、目的の倍率を掛けた後にSetLocalScale()とする事で「現在の大きさを基準したscaleの変更」をする事ができます。 | ||
- | ===== SetVelocity() ===== | ||
- | **引数:vector3**\\ | + | ===== SetVelocity ===== |
- | VCIの速度を、指定したVector3の値に設定します。\\ | + | **SetVelocity fun(velocity: Vector3):**\\ |
+ | Transformの速度を、指定したVector3の値に設定します。\\ | ||
\\ | \\ | ||
- | 下記サンプルはSubItemを掴んだ時に、+Z方向に移動するように速度を設定します。\\ | + | サンプルはSubItemを離した時に、+Z方向に移動するように速度を設定します。\\ |
実行された直後にVelocityの値を持った状態になります。\\ | 実行された直後にVelocityの値を持った状態になります。\\ | ||
- | Vector3.zero をセットすると、物理演算による移動を止める事ができます。\\ | + | Vector3.zero をセットすると、物理演算による移動を止める事ができます。 |
- | サンプル\\ | + | === 引数 === |
+ | vector3 | ||
+ | |||
+ | === サンプル === | ||
<file lua main.lua> | <file lua main.lua> | ||
- | item = vci.assets.GetSubItem("subitem") | + | item = vci.assets.GetTransform("subitem") |
- | function onGrab() | + | function onUngrab() |
local velocity = Vector3.__new(0, 0, 10) | local velocity = Vector3.__new(0, 0, 10) | ||
print(velocity) | print(velocity) | ||
ライン 380: | ライン 457: | ||
</file> | </file> | ||
- | ===== SetAngularVelocity() ===== | + | ===== SetAngularVelocity ===== |
- | + | **SetAngularVelocity fun(angularVelocity: Vector3):**\\ | |
- | **引数:vector3**\\ | + | Transformの角速度を、ラジアン/秒で表されるベクトルで設定します。\\ |
- | SubItemの角速度を、ラジアン/秒で表されるベクトルで設定します。\\ | + | |
\\ | \\ | ||
- | 下記サンプルは、SubItemを掴んだ時に、velocity変数の値を角速度として設定します。\\ | + | サンプルは、SubItemを離した時に、velocity変数の値を角速度として設定します。\\ |
- | サンプル\\ | + | === 引数 === |
+ | vector3 | ||
+ | |||
+ | === サンプル === | ||
<file lua main.lua> | <file lua main.lua> | ||
- | item = vci.assets.GetSubItem("subitem") | + | item = vci.assets.GetTransform("subitem") |
- | function onGrab() | + | function onUngrab() |
local velocity = Vector3.__new(10, 0, 0) | local velocity = Vector3.__new(10, 0, 0) | ||
print(velocity) | print(velocity) | ||
ライン 397: | ライン 476: | ||
</file> | </file> | ||
- | ===== AddForce() ===== | ||
- | **引数:vector3**\\ | + | ===== AddForce(force: Vec3, forceMode: ForceMode) ===== |
- | Vector3の方向に向かって力が加わります。\\ | + | **AddForce fun(force: Vector3, forceMode: ExportForceMode):**\\ |
- | \\ | + | [[vci/script/reference/forcemode#vciforcemode_exportforcemode | ForceMode]]で指定したアルゴリズムを利用し、Vector3の方向に向かって力を加えます。\\ |
- | 下記サンプルは掴んだ時に subitem の名前のオブジェクトがZ方向に移動します。\\ | + | |
- | AddForceなので、加速度があるような感じで少しづつ力が加わります。\\ | + | |
- | サンプル\\ | ||
- | <file lua main.lua> | ||
- | item = vci.assets.GetSubItem("subitem") | ||
- | function onGrab() | ||
- | local force = Vector3.__new(0, 0, 10) | ||
- | print(force) | ||
- | item.AddForce(force) | ||
- | end | ||
- | </file> | ||
- | ===== 装着アイテム操作 ===== | ||
- | VCバージョン: 1.9.2a以降 | ||
- | [[vci:component:sdk:attachable| VCIAttachable]]がアタッチされたSubItemの操作ができます。 | + | === forceMode.Forceを利用したサンプル === |
- | AttachToAvatarで装着し、DetachFromAvatarで脱着します。装着状態はIsAttachedで確認できます。 | + | |
- | 装着の判定は、VCIAttachableで設定された距離とボーン設定に従います。SubItemの所有権がない場合は装着できません。 | + | |
- | サンプル\\ | ||
<file lua main.lua> | <file lua main.lua> | ||
- | local item = vci.assets.GetSubItem("Cube") | + | item = vci.assets.GetTransform("subitem") |
- | + | function onUngrab() | |
- | local dist = item.AttachableDistance | + | item.AddForce(Vector3.__new(0, 0, 10), vci.forceMode.Force) |
- | print("AttachableDistance: "..dist) | + | |
- | + | ||
- | print("Bones") | + | |
- | local bones = item.AttachableHumanBodyBones | + | |
- | for key,value in ipairs(bones) do | + | |
- | print(key .. " : " .. value) | + | |
end | end | ||
+ | </file> | ||
- | function update() | ||
- | if vci.me.GetButtonInput(1) then | + | === forceMode.Impulseを利用したサンプル === |
- | print("装着します") | + | |
- | item.AttachToAvatar() | + | |
- | end | + | |
- | if vci.me.GetButtonInput(2) then | ||
- | print("脱着します") | ||
- | item.DetachFromAvatar() | ||
- | end | ||
- | end | + | <file lua main.lua> |
- | + | item = vci.assets.GetTransform("subitem") | |
- | vci.StartCoroutine( | + | function onUngrab() |
- | coroutine.create( | + | item.AddForce(Vector3.__new(0, 0, 10), vci.forceMode.Impulse) |
- | function() | + | |
- | while true do | + | |
- | local isAttached = item.IsAttached | + | |
- | if isAttached then | + | |
- | print("装着しています") | + | |
- | else | + | |
- | print("装着していません") | + | |
- | end | + | |
- | sleep(1) | + | |
- | end | + | |
- | end | + | |
- | ) | + | |
- | ) | + | |
- | + | ||
- | function sleep(sec) | + | |
- | local t0 = os.time() + sec | + | |
- | while os.time() < t0 do | + | |
- | coroutine.yield() | + | |
- | end | + | |
end | end | ||
</file> | </file> | ||
- | ==== サンプルデータ ==== | ||
- | 手をかざすと自動で付着して、5秒後に離れるVCIです。装着中はエフェクトが再生されます。 | ||
- | {{:vci:script:reference:2020041612403245.jpg?400|}} | + | ===== IsMine ===== |
- | + | **IsMine boolean**\\ | |
- | {{ :vci:script:reference:attachsample.zip |}} | + | SubItemの所有者の場合だけ処理したい場合などに使用します。\\ |
+ | 所有権については [[vci:script:reference:eventfunction:ownership|所有権とイベント関数の関係]] を参考にしてください。 | ||
+ | === サンプル === | ||
<file lua main.lua> | <file lua main.lua> | ||
- | local item = vci.assets.GetSubItem("Ball") | + | item = vci.assets.GetTransform('SubItem') |
- | local effect = vci.assets.GetEffekseerEmitter("Ball") | + | |
- | + | function updateAll() -- 所有権に関係なく全ユーザーが十個する | |
- | vci.StartCoroutine( | + | if item.IsMine then -- SubItemの所有者の場合 true |
- | coroutine.create( | + | item.SetPosition(Vector3.__new(1, 2, 3)) |
- | function() | + | |
- | while true do | + | |
- | if item.IsAttached == false then | + | |
- | item.AttachToAvatar() | + | |
- | sleep(0.1) | + | |
- | if item.IsAttached then | + | |
- | effect.Play() | + | |
- | sleep(5) | + | |
- | item.DetachFromAvatar() | + | |
- | effect.Stop() | + | |
- | sleep(1) | + | |
- | end | + | |
- | end | + | |
- | sleep(0.5) | + | |
- | end | + | |
- | end | + | |
- | ) | + | |
- | ) | + | |
- | + | ||
- | function sleep(sec) | + | |
- | local t0 = os.time() + sec | + | |
- | while os.time() < t0 do | + | |
- | coroutine.yield() | + | |
end | end | ||
end | end | ||
</file> | </file> | ||
- | ===== SetActive() / ActiveSelf / ActiveInHierarchy ===== | + | === SetAttractable === |
+ | **SetAttractable fun(value: boolean):** | ||
+ | SubItemの引き寄せを設定します。 | ||
+ | |||
+ | ===== IsSubItem ===== | ||
+ | **IsSubItem boolean**\\ | ||
+ | SubItemであるかどうかを返します。 | ||
+ | |||
+ | |||
+ | ===== SetActive / ActiveSelf / ActiveInHierarchy ===== | ||
+ | **SetActive fun(isActive: boolean):**\\ | ||
+ | **_ALL_SetActive fun(isActive: boolean):**\\ | ||
+ | **ActiveSelf boolean**\\ | ||
+ | **ActiveInHierarchy boolean**\\ | ||
Transform の有効無効設定は ''SetActive(isActive: bool)'' で設定することができます。\\ | Transform の有効無効設定は ''SetActive(isActive: bool)'' で設定することができます。\\ | ||
デフォルトの状態は有効です。\\ | デフォルトの状態は有効です。\\ | ||
ライン 534: | ライン 554: | ||
また ''ActiveSelf'' は自分自身の有効無効設定を取得します。 | また ''ActiveSelf'' は自分自身の有効無効設定を取得します。 | ||
- | ただし Transform が他の Transform の子になっている場合は挙動が複雑になります。 | + | ただし Transform が他の Transform の子になっている場合は挙動が複雑になります。\\ |
たとえば Hierarchy 上の親 Transform が無効状態ならば、自身の有効無効に関わらず、無効状態になります。 | たとえば Hierarchy 上の親 Transform が無効状態ならば、自身の有効無効に関わらず、無効状態になります。 | ||
ライン 544: | ライン 564: | ||
</code> | </code> | ||
+ | |||
+ | === サンプル === | ||
<file lua main.lua> | <file lua main.lua> | ||
local Parent = vci.assets.GetTransform("Parent") | local Parent = vci.assets.GetTransform("Parent") | ||
ライン 556: | ライン 578: | ||
print(Child.ActiveInHierarchy) --> false. Child は実際には無効状態となる. | print(Child.ActiveInHierarchy) --> false. Child は実際には無効状態となる. | ||
</file> | </file> | ||
+ | |||
+ | |||