Language:

サイドバー

バーチャルキャスト公式Wiki

メインメニュー

初心者向けガイド

VirtualCast

遊ぶ世界

THE SEED ONLINE

ニコニコ

SHOWROOM

配信

配信ツール

その他

wikiについて

デベロッパー向け


開発環境

VRM(アバター)

VCI(アイテム/背景)

VCI更新情報

更新日 - UniVCI バージョン
2021/03/17 v0.32
2.0.3b
2021/01/14 v0.31
2.0.1a
2020/12/03 v0.30
2.0.0b
2020/11/12 v0.30
2.0.0a
2020/10/22 v0.29
1.9.5b
2020/07/30 v0.29
1.9.3e
2020/06/25 v0.28
1.9.3c
2020/05/21 v0.27
1.9.2e

以前のアップデート履歴


GLB(背景)

vci:script:reference:vector3

Vector3

types.lua を開くと最新のメソッド一覧を確認できます。
Vector3はX,Y,Zの3つの値を持ったクラスです。
位置や力の方向を表したりするのに使います。

メソッド一覧

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


メソッド名 説明
Slerp (a: Vec3, b: Vec3, t: num): Vec3 2つのベクトル間を t で球面補間します。t は[0, 1]の範囲です。
SlerpUnclamped (a: Vec3, b: Vec3, t: num): Vec3 Slerpと同じですが t の値を[0, 1]に制限しません。バネ等に使います。
OrthoNormalize (normal: usertype, tangent: usertype) 正規化したベクトル、直交ベクトル、外積を作成します。
RotateTowards (current, target, maxRadiansDelta, maxMagnitudeDelta): Vec3 currentの向きから、targetの向きまで回転させます。ただし、その際の最大速度はmaxRadiansDelta m/secに制限されます。
Lerp (a: Vec3, b: Vec3, t: num): Vec3 2つのベクトル間を t で線形補間します。t は[0, 1]の範囲です。
LerpUnclamped (a: Vec3, b: Vec3, t: num): Vec3 Lerpと同じですが t の値を[0, 1]に制限しません。バネ等に使います。
MoveTowards (current: Vec3, target: Vec3, maxDistanceDelta: num): Vec3 currentの位置から、targetの位置まで移動させます。ただし、その際の最大速度はmaxDistanceDelta m/secに制限されます。
SmoothDamp (current: Vec3, target: Vec3, currentVelocity: usertype, smoothTime: num, maxSpeed: num): Vec3 目的地に向かって時間の経過とともに徐々にベクトルを変化させます。
set_Item (index: num, value: num) Vector3の値をvalueで上書きします。index 0 = x, 1 = y, 2 = z
Set (newX: num, newY: num, newZ: num) Vector3の値を上書きします。
Scale (a: Vec3, b: Vec3): Vec3 2つのベクトルの各成分を乗算します。
Cross (lhs: Vec3, rhs: Vec3): Vec3 2つのベクトルの外積を計算します。
GetHashCode (): num ハッシュ値を求めます。
Reflect (inDirection: Vec3, inNormal: Vec3): Vec3 inDirectionで指定したベクトルをinNormalで反射させます。
Normalize (value: Vec3): Vec3 ベクトルを正規化して単位ベクトルにします。
Dot (lhs: Vec3, rhs: Vec3): num 2つのベクトルの内積を計算します。
Project (vector: Vec3, onNormal: Vec3): Vec3 onNormalを基準としvectorを投影した時のベクトルを求めます。
ProjectOnPlane (vector: Vec3, planeNormal: Vec3): Vec3 planeNormalを法線ベクトルとする面へのvectorベクトルの投影ベクトルを求めます。
Angle (from: Vec3, to: Vec3): num from,toの2つのベクトルが張る角度を度数法で返す。
SignedAngle (from: Vec3, to: Vec3, axis: Vec3): num fromベクトルとtoベクトルの間の角度を符号付きで返します。正負はaxisの方向によって決定されます。
Distance (a: Vec3, b: Vec3): num aとb、2点間の距離を計算します。 ※(a-b).magnitudeと同じ処理
ClampMagnitude (vector: Vec3, maxLength: num): Vec3 vectorの長さを最大maxLengthに制限します。vectorの長さがmaxLength以下の場合そのまま返します。maxLength以上の場合は方向はそのまま長さがmaxLengthになるように規格化します。
Magnitude (vector: Vec3): num ベクトルの長さを求めます。
SqrMagnitude (vector: Vec3): num ベクトルを二乗の長さを求めます。
Min (lhs: Vec3, rhs: Vec3): Vec3 2つのベクトルの各成分を比較して、最小の値でベクトルを作成します。
Max (lhs: Vec3, rhs: Vec3): Vec3 2つのベクトルの各成分を比較して、最大の値でベクトルを作成します。
ToString (): string 文字列に変換します
AngleBetween (from: Vec3, to: Vec3): num 単位がラジアンのAngle。fromとtoとの間の角度をラジアンで返します。符号は付きません。
Exclude (excludeThis: Vec3, fromThat: Vec3): Vec3 ProjectOnPlaneと同じです。(unity4.6より非推奨のようです。ProjectOnPlaneを使用してください。)
normalized: Vec3 ベクトルの正規化を行います。(読み取り専用)
magnitude: num ベクトルを長さとして読み取ります。
sqrMagnitude: num ベクトルを二乗の長さとして読み取ります。

初期化について

初期化周りのメソッド

メソッド名 説明
_new (x: num, y: num, z: num): Vec3 初期化 新しいVector3を宣言する時に使用します
zero: Vec3 (0.0, 0.0, 0.0)
one: Vec3 (1.0, 1.0, 1.0)
forward: Vec3 (0.0, 0.0, 1.0) Z軸プラス
back: Vec3 (0.0, 0.0, -1.0) Z軸マイナス
up: Vec3 (0.0, 1.0, 0.0) Y軸プラス
down: Vec3 (0.0, -1.0, 0.0) Y軸マイナス
left: Vec3 (-1.0, 0.0, 0.0) X軸マイナス
right: Vec3 (1.0, 0.0, 0.0) X軸プラス
positiveInfinity: Vec3 (Infinity, Infinity, Infinity)
negativeInfinity: Vec3 (-Infinity, -Infinity, -Infinity)
fwd: Vec3 (0.0, 0.0, 1.0) Z軸プラス(forwardと同じ)
kEpsilon: num
kEpsilonNormalSqrt: num
x: num Vec3x のみにアクセスします
y: num Vec3y のみにアクセスします
z: num Vec3z のみにアクセスします

サンプル

main.lua
local pos = Vector3.__new(1,1,1)
local zero = Vector3.zero
local one = Vector3.one
print(pos)
print(zero)
print(one)

実行結果

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

説明
VCIスクリプトでVector3を初期化する時は上記にようにnewを使用しいます。
また、Vector3のあとにzerooneという形で指定する事も可能です。
数値はnumber型 となり、内部的には浮動小数点となります。

初期化タイプ一覧

サンプル

main.lua
    local zero = Vector3.zero
    print(zero)
    local one = Vector3.one
    print(one)
    local forward = Vector3.forward
    print(forward)
    local back = Vector3.back
    print(back)
    local up = Vector3.up
    print(up)
    local down = Vector3.down
    print(down)
    local left = Vector3.left
    print(left)
    local right = Vector3.right
    print(right)

実行結果

(0.0, 0.0, 0.0)
(1.0, 1.0, 1.0)
(0.0, 0.0, 1.0)
(0.0, 0.0, -1.0)
(0.0, 1.0, 0.0)
(0.0, -1.0, 0.0)
(-1.0, 0.0, 0.0)
(1.0, 0.0, 0.0)

説明
X軸方向が左右 Y軸方向が上下 Z軸方向が前後 となるベクトルです。
例えば、ExportTransformのSetVelocity()を使ってVector3.forwardをSubItemのに加えれば、Z軸の方向に向かって移動します。

fwd, negativeInfinity, positiveInfinity

サンプル

main.lua
    local fwd = Vector3.fwd
    print(fwd)
    local negativeInfinity = Vector3.negativeInfinity
    print(negativeInfinity)
    local positiveInfinity = Vector3.positiveInfinity
    print(positiveInfinity)

実行結果

(0.0, 0.0, 1.0)
(-Infinity, -Infinity, -Infinity)
(Infinity, Infinity, Infinity)

説明
Infinityは無限を表します。AddForceで利用すると、目に見えない速度で飛んでいきます。
Vector3.fwd は Vector3.forward と同じ意味です。

kEpsilon

main.lua
local Subitem = vci.assets.GetTransform("Subitem")
 
function onUse(use)
    itempos = SubItem.GetLocalPosition()
    print(itempos.kEpsilon)
end


実行結果

(Vector3.kEpsilonで使用する)
9099999974737875E-06

x y z の各要素へのアクセス

サンプル

main.lua
    local pos = Vector3.__new(1,1,1)
    pos.x = pos.x + 1
    pos.x = pos.y + 2
    pos.x = pos.z + 3
    print(pos.x)
    print(pos.y)
    print(pos.z)

実行結果

2
3
4

Vector3の各要素へ個別にアクセスする場合は、変数の末尾にアクセスしたい要素を指定します。
変数名.アクセスしたい要素 と書きます。

Slerp (球面補間)

Slerp (a: Vec3, b: Vec3, t: num): Vec3

サンプル

main.lua
function updateAll()
    -- time [0,1]
    local time = 0.5 * math.sin(os.time()) + 0.5
    local pos = Vector3.Slerp(Vector3.up, Vector3.down, time)
    vci.assets.GetTransform("Subitem").SetLocalPosition(pos)
end

実行結果

座標(0,1,0)から座標(0,-1,0)へ球面補間を行って往復移動します。

説明
2つのベクトル間を t で球面補間します。t は[0, 1]の範囲です。

SlerpUnclamped (球面補間)

SlerpUnclamped (a: Vec3, b: Vec3, t: num): Vec3

サンプル

main.lua
function updateAll()
    -- time [0,2]
    local time = math.sin(os.time()) + 1
    local pos = Vector3.SlerpUnclamped(Vector3.up, Vector3.down, time)
    vci.assets.GetTransform("Subitem").SetLocalPosition(pos)
end

実行結果

座標(0,1,0)から座標(0,-1,0)を通って1周球面補間を行って往復移動します。

説明
Slerpと同じですが t の値を[0, 1]に制限しません。バネ等に使います。

OrthoNormalize

OrthoNormalize (normal: usertype, tangent: usertype)

サンプル

main.lua
function onUse(use)
    local vecfo2 = Vector3.forward * 2
    local orthogonal = Vector3.zero
    local cross = Vector3.zero
 
    print(vecfo2)
    Vector3.OrthoNormalize(vecfo2, orthogonal, cross)
    print(vecfo2)
    print(orthogonal)
    print(cross)
end

実行結果

(0.0, 0.0, 2.0)
(0.0, 0.0, 1.0)
(0.0, -1.0, 0.0)
(1.0, 0.0, 0.0)

説明
正規化したベクトル、直交ベクトル、外積を求めることが出来ます。

RotateTowards

RotateTowards (current, target, maxRadiansDelta, maxMagnitudeDelta): Vec3

サンプル

main.lua
local Subitem = vci.assets.GetTransform("Subitem")
local Subitem2 = vci.assets.GetTransform("Subitem2")
 
function updateAll()
    local dir = Subitem.GetPosition() - Subitem2.GetPosition()
    local move = Vector3.RotateTowards(Subitem2.GetForward(), dir, 0.001,0)
    Subitem2.SetRotation(Quaternion.LookRotation(move))
end

実行結果

Subitem2がSubItemの方に「0.001」の速度で向きを変える。

説明
currentの向きから、targetの向きまで回転させます。ただし、その際の最大速度はmaxRadiansDelta m/secに制限されます。

Lerp (線形補間)

Lerp (a: Vec3, b: Vec3, t: num): Vec3

サンプル

main.lua
function updateAll()
    -- time [0,1]
    local time = 0.5 * math.sin(os.time()) + 0.5
    local pos = Vector3.Lerp(Vector3.up, Vector3.down, time)
    vci.assets.GetTransform("Subitem").SetLocalPosition(pos)
end

実行結果

座標(0,1,0)から座標(0,-1,0)へ線形補間を行って往復移動します。

説明
2つのベクトル間を t で線形補間します。t は[0, 1]の範囲です。

LerpUnclamped (線形補間)

LerpUnclamped (a: Vec3, b: Vec3, t: num): Vec3

サンプル

main.lua
function updateAll()
    -- time [-1,1]
    local time = math.sin(os.time())
    local pos = Vector3.LerpUnclamped(Vector3.up, Vector3.down, time)
    vci.assets.GetTransform("Subitem").SetLocalPosition(pos)
end

実行結果

座標(0,2,0)から座標(0,-1,0)へ線形補間を行って往復移動します。

説明
Lerpと同じですが t の値を[0, 1]に制限しません。バネ等に使います。

MoveTowards

MoveTowards (current: Vec3, target: Vec3, maxDistanceDelta: num): Vec3

サンプル

main.lua
local Subitem = vci.assets.GetTransform("Subitem")
 
function updateAll()
    local target = Vector3.__new(1,1,1)
    local move = Vector3.MoveTowards(Subitem.GetLocalPosition(), target, 0.01)
    Subitem.SetLocalPosition(move)
end

実行結果

cubeがある位置から座標(1,1,1)へ秒速0.01mで等速直線運動で移動します。\\

説明
currentの位置から、targetの位置まで移動させます。ただし、その際の最大速度はmaxDistanceDelta m/secに制限されます。

SmoothDamp

SmoothDamp (current: Vec3, target: Vec3, currentVelocity: usertype, smoothTime: num, maxSpeed: num): Vec3

サンプル

main.lua
local Subitem = vci.assets.GetTransform("Subitem")
local Subitem2 = vci.assets.GetTransform("Subitem2")
 
local ver = Vector3.zero
 
function updateAll()
    local move = Vector3.SmoothDamp(Subitem2.GetPosition(), Subitem.GetPosition(), ver, 1, 1)
    Subitem2.SetPosition(move)
end

実行結果

Subitem2がSubitemに向かって動きます。

説明
目的地に向かって時間の経過とともに徐々にベクトルを変化させます。

set_Item

set_Item (index: num, value: num)

サンプル

main.lua
local vect = Vector3.zero
 
function onUse(use)
    print(vect)
    vect.set_Item(0,2)
    print(vect)
    vect.set_Item(1,4)
    print(vect)
    vect.set_Item(2,6)
    print(vect)
end

実行結果

(0.0, 0.0, 0.0)
(2.0, 0.0, 0.0)
(2.0, 4.0, 0.0)
(2.0, 4.0, 6.0)

Vector3の数値を指定することが出来ます。
第一引数に0~2の値を使います。
0 = x, 1 = y, 2 = z
第二引数に指定する数値を入れます。

説明
Vector3の値をvalueで上書きします。index 0 = x, 1 = y, 2 = z

Set

Set (newX: num, newY: num, newZ: num)

サンプル

main.lua
local vect = Vector3.zero
 
function onUse(use)
    print(vect)
    vect.Set(1, 1, 1)
    print(vect)
    vect.Set(2, 3, 4)
    print(vect)
end

実行結果

(0.0, 0.0, 0.0)
(1.0, 1.0, 1.0)
(2.0, 3.0, 4.0)

説明
Vector3の値を上書きします。

Scale

Scale (a: Vec3, b: Vec3): Vec3

サンプル

main.lua
local Subitem = vci.assets.GetTransform("Subitem")
local Subitem2 = vci.assets.GetTransform("Subitem2")
 
function onUse(use)
    local itemPos = Subitem.GetPosition()
    local vect_y0 = Vector3.__new(1, 0, 1)
    local destinationPos = Vector3.Scale(itemPos,vect_y0)
    print(itemPos)
    print(destinationPos)
    Subitem2.SetPosition(destinationPos)
end

実行結果

(2.0, 3.0, 4.0)
(2.0, 0.0, 4.0)
Subitemがある位置のY軸が0の位置にSubitem2が移動する。

説明
2つのベクトルの各成分を乗算します。

Cross

Cross (lhs: Vec3, rhs: Vec3): Vec3

サンプル

main.lua
local Subitem = vci.assets.GetTransform("Subitem")
 
local owner = vci.studio.GetOwner()
 
function onUse(use)
    local itemPos = Subitem.GetPosition()
    local ownerPos = owner.GetPosition()
    local vect_y0 = Vector3.__new(1, 0, 1)
    local vector = Vector3.Scale(itemPos - ownerPos, vect_y0)
    local ownerVec = Vector3.Scale(owner.GetForward(), vect_y0)
    local axis = Vector3.Cross(ownerVec, Vector3.Normalize(vector))
 
    print(axis)
end

実行結果

向いてる方向にSubitemがある場合
(0.0, 0.0, 0.0)
向いてる方向から時計回りに90度回転した先にSubitemがある場合
(0.0, 1.0, 0.0)
向いてる方向から時計回りに180度回転した先にSubitemがある場合
(0.0, 0.0, 0.0)
向いてる方向から時計回りに270度回転した先にSubitemがある場合
(0.0, -1.0, 0.0)

0度~360度の向きを外積を使って-1~1で表現できるようにしています。

説明
2つのベクトルの外積を計算します。

GetHashCode

GetHashCode (): num

サンプル

main.lua
local Subitem = vci.assets.GetTransform("Subitem")
local Subitem2 = vci.assets.GetTransform("Subitem2")
 
function onUse(use)
    local itemPos = Subitem.GetPosition()
    local item2Pos = Subitem2.GetPosition()
 
    print(itemPos)
    print(itemPos.GetHashCode())
    print(item2Pos)
    print(item2Pos.GetHashCode())
end

実行結果

(-1.0, 1.2, -0.8)
-1359839706
(0.6, 1.1, -0.1)
785239771
Subitemの場所を移動してからもう一度
(0.0, 0.0, 0.0)
-1356910401
(0.6, 1.1, -0.1)
785239771

説明
Vector3に対してハッシュ値を求めます。
VCIを再読み込みしたり部屋から退出するとハッシュ値が変わります。

Reflect

Reflect (inDirection: Vec3, inNormal: Vec3): Vec3

サンプル

main.lua
local Subitem = vci.assets.GetTransform("Subitem")
 
function onUse(use)
    print(Subitem.GetForward())
    print(Vector3.Reflect(Subitem.GetForward(), Vector3.up))
end

実行結果

(-0.4, 0.2, 0.3)
(-0.4, -0.2, 0.3)

説明
inDirectionで指定したベクトルをinNormalで反射させます。
第一引数に反射させたいベクトル、第二引数に反射させたい面の法線ベクトルを指定します。

Normalize

Normalize (value: Vec3): Vec3

サンプル

main.lua
    local vec3 = Vector3.__new(0.5,1,2)
    print(vec3)
    vec3.Normalize()
    print(vec3)

実行結果

(0.5, 1.0, 2.0)
(0.2, 0.4, 0.9)

説明
ベクトルの正規化を行います。
2つのベクトルを比較する時に、そのままの値では扱いづらいので正規化を行い基準を揃え、単位ベクトルにします。
ベクトルを方向として扱いたい場合、長さを1に揃えて方向のみの要素として扱う必要があります。

Dot (内積)

Dot (lhs: Vec3, rhs: Vec3): num

サンプル

main.lua
function onGrab(target)
    local Subitem = vci.assets.GetTransform("Subitem")
    local dot = Vector3.Dot(Vector3.up, Subitem.GetUp())
    print(dot)
end

実行結果

Dotは引数のベクトルを比較した値を返します。\\
例えばサンプルのdotの値が1に近づけば、Subitemは基本の姿勢に近く、-1に近づくほど逆さまになっている事が分かります。\\
UnityやVCI等においては、姿勢や向きなどを知る方法として使われるかと思います。\\

説明
2つのベクトルの内積を計算します。

Project

Project (vector: Vec3, onNormal: Vec3): Vec3

サンプル

main.lua
local Subitem = vci.assets.GetTransform("Subitem")
 
function onUse(use)
    local itemPos = Subitem.GetPosition()
    print(itemPos)
    print(Vector3.Project(itemPos, Vector3.forward))
end

実行結果

(-1.9, 1.2, -2.2)
(0.0, 0,0 -2.2)
第二引数のベクトルと、第一引数のベクトルから第二引数のベクトルの方向に伸ばした線が垂直に交わる位置を返します。\\

説明
onNormalを基準としvectorを投影した時のベクトルを求めます。

ProjectOnPlane

ProjectOnPlane (vector: Vec3, planeNormal: Vec3): Vec3

サンプル

main.lua
local Subitem = vci.assets.GetTransform("Subitem")
 
function onUse(use)
    local itemPos = Subitem.GetPosition()
    print(itemPos)
    print(Vector3.ProjectOnPlane(itemPos, Vector3.up))
 
end

実行結果

(1.0, 2.0, 3.0)
(1.0, 0.0, 3.0)
Projectと違い、第二引数に法線を使用します。

サンプル2

main.lua
local Subitem = vci.assets.GetTransform("Subitem")
local Subitem2 = vci.assets.GetTransform("Subitem2")
 
function onUse(use)
    local item2Pos = Subitem.GetPosition()
    local item2Pos = Subitem2.GetPosition()
    local setPos = Vector3.ProjectOnPlane(itemPos - item2Pos, item2.GetUp())
 
    print(itemPos)
    print(item2Pos)
 
    Subitem.SetPosition(setPos + item2Pos)
 
end

実行結果

(-0.8, 1.1, -1.3)
(-1.0, -0.6, 1.1)
Subitem2から真上に見たときにSubitemが垂直の位置に見える座標を得ます。\\
実行するとSubitem2上にSubitemが移動します。\\

説明
planeNormalを法線ベクトルとする面へのvectorベクトルの投影ベクトルを求めます。

Angle

Angle (from: Vec3, to: Vec3): num

サンプル

main.lua
local Subitem = vci.assets.GetTransform("Subitem")
local Subitem2 = vci.assets.GetTransform("Subitem2")
 
function onUse(use)
    local itemPos = Subitem.GetPosition()
    local item2Pos = Subitem2.GetPosition()
 
    print(Vector3.Angle(itemPos, item2Pos))
end

実行結果

7.07201910018921
角度を0から180の間で返す。

説明
from,toの2つのベクトルが張る角度を度数法で返す。

SignedAngle

SignedAngle (from: Vec3, to: Vec3, axis: Vec3): num

サンプル

main.lua
local Subitem = vci.assets.GetTransform("Subitem")
local Subitem2 = vci.assets.GetTransform("Subitem2")
 
function onUse(use)
    local itemPos = Subitem.GetPosition()
    local item2Pos = Subitem2.GetPosition()
 
    print(Vector3.SignedAngle(itemPos, item2Pos, Vector3.up))
end

実行結果

-8.1070910010225

角度を-180から180の間で返す。
Angleと違い、第三引数に軸となるベクトルを用意する必要がある。
説明
fromベクトルとtoベクトルの間の角度を符号付きで返します。正負はaxisの方向によって決定されます。

Distance

Distance (a: Vec3, b: Vec3): num

サンプル

main.lua
local Subitem = vci.assets.GetTransform("Subitem")
local Subitem2 = vci.assets.GetTransform("Subitem2")
 
function onUse(use)
    local item = Subitem.GetPosition()
    local item2Pos = Subitem2.GetPosition()
 
    print(itemPos);
    print(item2Pos);
    print(Vector3.Distance(itemPos, item2Pos));
 
end

実行結果

(1, 1, 1)
(1, 1, 5)
4.00000047683716
第一引数と第二引数の距離を求める。

説明
aとb、2点間の距離を計算します。 ※(a-b).magnitudeと同じ処理

ClampMagnitude

ClampMagnitude (vector: Vec3, maxLength: num): Vec3

サンプル

main.lua
function onUse(use)
    local Pos = Vector3.__new(0,0,4)
 
    print(Vector3.ClampMagnitude(Pos, 3))
    print(Vector3.ClampMagnitude(Pos, 5))
 
end

実行結果

(0, 0, 3)
(0, 0, 4)
第一引数のベクトルの長さが第二引数よりも大きい場合は、第二引数の値に丸められる。

説明
vectorの長さを最大maxLengthに制限します。
vectorの長さがmaxLength以下の場合そのまま返します。
maxLength以上の場合は方向はそのまま長さがmaxLengthになるように規格化します。

Magnitude

Magnitude (vector: Vec3): num

サンプル

main.lua
function onUse(use)
    local Pos = Vector3.__new(3,0,4)
    print(Vector3.Magnitude(Pos))
end

実行結果

5

説明
ベクトルの長さを求めます。

SqrMagnitude

SqrMagnitude (vector: Vec3): num

サンプル

main.lua
function onUse(use)
    local Pos = Vector3.__new(3,0,4)
    print(Vector3.SqrMagnitude(Pos))
end

実行結果

25

説明
ベクトルを二乗の長さを求めます。

Min,Max

Min (lhs: Vec3, rhs: Vec3): Vec3
Max (lhs: Vec3, rhs: Vec3): Vec3

サンプル

main.lua
local Subitem = vci.assets.GetTransform("Subitem")
local Subitem2 = vci.assets.GetTransform("Subitem2")
 
function onUse(use)
    local itemPos = Subitem.GetPosition()
    local item2Pos = Subitem2.GetPosition()
 
    print(Vector3.Min(itemPos, item2Pos))
    print(Vector3.Max(itemPos, item2Pos))
 
end

実行結果

(1.0, 1.0, 1.0)
(1.0, 1.0, 5.0)

説明
2つのベクトルの各成分を比較して、最小(Min)、最大(Max)の値でベクトルを作成します。

ToString

ToString (): string

サンプル

main.lua
local Subitem = vci.assets.GetTransform("Subitem")
 
function onUse(use)
    local itemPos = Subitem.GetPosition()
    print(itemPos.ToString())
end

実行結果

"(1.0, 1.0, 1.0)"

説明
文字列に変換します。

AngleBetween

AngleBetween (from: Vec3, to: Vec3): num

サンプル

main.lua
local Subitem = vci.assets.GetTransform("Subitem")
local Subitem2 = vci.assets.GetTransform("Subitem2")
 
function onUse(use)
    local itemPos = Subitem.GetPosition()
    local item2Pos = Subitem2.GetPosition()
 
    print(Vector3.AngleBetween(itemPos, item2CubePos))
end

実行結果

0.987237751483917

説明
単位がラジアンのAngle。fromとtoとの間の角度をラジアンで返します。符号は付きません。 180度 = 3.14159…

normalized

normalized: Vec3

サンプル

main.lua
    local vec3 = Vector3.__new(0.5,1,2)
    print(vec3)
    print(vec3.normalized)
    print(vec3)

実行結果

(0.5, 1.0, 2.0)
(0.2, 0.4, 0.9)
(0.5, 1.0, 2.0)

説明
ベクトルの正規化を行います。
2つのベクトルを比較する時に、そのままの値では扱いづらいので正規化を行い基準を揃え、単位ベクトルにします。
ベクトルを方向として扱いたい場合、長さを1に揃えて方向のみの要素として扱う必要があります。

magnitude

magnitude: num

サンプル

main.lua
function onUse(use)
    local vec3 = Vector3.__new(3, 4, 0)
    print(vec3)
    print(vec3.magnitude)
end

実行結果

5

説明
ベクトルを長さとして読み取ります。

sqrMagnitude

sqrMagnitude: num

サンプル

main.lua
function onUse(use)
    local vec3 = Vector3.__new(3, 4, 0)
    print(vec3)
    print(vec3.sqrMagnitude)
end

実行結果

25

説明
ベクトルを二乗の長さとして読み取ります。

vci/script/reference/vector3.txt · 最終更新: 2021/06/17 19:22 by t-daihisa

ページ用ツール