この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
vci:script:reference:vector3 [2021/06/17 19:22] t-daihisa |
vci:script:reference:vector3 [2023/06/01 11:12] (現在) pastatto リファレンスページの注意書き追加 |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
+ | ~~NOTOC~~ | ||
====== Vector3 ====== | ====== Vector3 ====== | ||
- | **types.lua を開くと最新のメソッド一覧を確認できます。**\\ | + | <WRAP center round important 80%> |
+ | |||
+ | このページは過去の情報となります。\\ | ||
+ | 新しいスクリプトリファレンスは**[[https://developer.virtualcast.jp/vci-docs/api/|こちら]]**になります。 | ||
+ | </WRAP> | ||
Vector3はX,Y,Zの3つの値を持ったクラスです。\\ | Vector3はX,Y,Zの3つの値を持ったクラスです。\\ | ||
位置や力の方向を表したりするのに使います。 | 位置や力の方向を表したりするのに使います。 | ||
- | ===== メソッド一覧 ===== | + | ^ 名前 ^ 説明 ^ バージョン ^ |
- | + | | [[vci/script/reference/vector3#Slerp ]] | 2つのベクトル間を t で球面補間します。t は[0, 1]の範囲です。 | | |
- | **メソッド一覧は[EmbeddedScriptWorkspace]フォルダ内の[types.lua]を開くと最新のメソッド一覧を確認できます。**\\ | + | | [[vci/script/reference/vector3#SlerpUnclamped ]] | Slerpと同じですが t の値を[0, 1]に制限しません。バネ等に使います。 | |
- | **表記の省略の為、''Vector3型'' は ''Vec3''、''number型'' は ''num'' と表記してあります。**\\ | + | | [[vci/script/reference/vector3#OrthoNormalize ]] | 正規化したベクトル、直交ベクトル、外積を作成します。 | |
- | **引数は ''()'' の中に、戻り値の型は '':(セミコロン)'' の後に表記してあります。** | + | | [[vci/script/reference/vector3#RotateTowards ]] | currentの向きから、targetの向きまで回転させます。ただし、その際の最大速度はmaxRadiansDelta m/secに制限されます。 | |
- | ---- | + | | [[vci/script/reference/vector3#Lerp ]] | 2つのベクトル間を t で線形補間します。t は[0, 1]の範囲です。 | |
- | + | | [[vci/script/reference/vector3#LerpUnclamped ]] | Lerpと同じですが t の値を[0, 1]に制限しません。バネ等に使います。 | | |
- | + | | [[vci/script/reference/vector3#MoveTowards ]] | currentの位置から、targetの位置まで移動させます。ただし、その際の最大速度はmaxDistanceDelta m/secに制限されます。 | | |
- | ^ メソッド名 ^ 説明 ^ | + | | [[vci/script/reference/vector3#SmoothDamp ]] | 目的地に向かって時間の経過とともに徐々にベクトルを変化させます。 | |
- | | [[vci/script/reference/vector3#slerp_球面補間 | Slerp (a: Vec3, b: Vec3, t: num): Vec3 ]] | 2つのベクトル間を t で球面補間します。t は[0, 1]の範囲です。 | | + | | [[vci/script/reference/vector3#set_Item ]] | Vector3の値をvalueで上書きします。index 0 = x, 1 = y, 2 = z | |
- | | [[vci/script/reference/vector3#slerpunclamped_球面補間 | SlerpUnclamped (a: Vec3, b: Vec3, t: num): Vec3 ]] | Slerpと同じですが t の値を[0, 1]に制限しません。バネ等に使います。 | | + | | [[vci/script/reference/vector3#Set ]] | Vector3の値を上書きします。 | |
- | | [[vci/script/reference/vector3#orthonormalize | OrthoNormalize (normal: usertype, tangent: usertype) ]] | 正規化したベクトル、直交ベクトル、外積を作成します。 | | + | | [[vci/script/reference/vector3#Scale ]] | 2つのベクトルの各成分を乗算します。 | |
- | | [[vci/script/reference/vector3#rotatetowards | RotateTowards (current, target, maxRadiansDelta, maxMagnitudeDelta): Vec3 ]] | currentの向きから、targetの向きまで回転させます。ただし、その際の最大速度はmaxRadiansDelta m/secに制限されます。 | | + | | [[vci/script/reference/vector3#Cross ]] | 2つのベクトルの外積を計算します。 | |
- | | [[vci/script/reference/vector3#lerp_線形補間 | Lerp (a: Vec3, b: Vec3, t: num): Vec3 ]] | 2つのベクトル間を t で線形補間します。t は[0, 1]の範囲です。 | | + | | [[vci/script/reference/vector3#GetHashCode ]] | ハッシュ値を求めます。 | |
- | | [[vci/script/reference/vector3#lerpunclamped_線形補間 | LerpUnclamped (a: Vec3, b: Vec3, t: num): Vec3 ]] | Lerpと同じですが t の値を[0, 1]に制限しません。バネ等に使います。 | | + | | [[vci/script/reference/vector3#Reflect ]] | inDirectionで指定したベクトルをinNormalで反射させます。 | |
- | | [[vci/script/reference/vector3#movetowards | MoveTowards (current: Vec3, target: Vec3, maxDistanceDelta: num): Vec3 ]] | currentの位置から、targetの位置まで移動させます。ただし、その際の最大速度はmaxDistanceDelta m/secに制限されます。 | | + | | [[vci/script/reference/vector3#Normalize ]] | ベクトルを正規化して単位ベクトルにします。 | |
- | | [[vci/script/reference/vector3#smoothdamp | SmoothDamp (current: Vec3, target: Vec3, currentVelocity: usertype, smoothTime: num, maxSpeed: num): Vec3 ]] | 目的地に向かって時間の経過とともに徐々にベクトルを変化させます。 | | + | | [[vci/script/reference/vector3#Dot ]] | 2つのベクトルの内積を計算します。\\ | |
- | | [[vci/script/reference/vector3#set_item | set_Item (index: num, value: num) ]] | Vector3の値をvalueで上書きします。index 0 = x, 1 = y, 2 = z | | + | | [[vci/script/reference/vector3#Project ]] | onNormalを基準としvectorを投影した時のベクトルを求めます。 | |
- | | [[vci/script/reference/vector3#set | Set (newX: num, newY: num, newZ: num) ]] | Vector3の値を上書きします。 | | + | | [[vci/script/reference/vector3#ProjectOnPlane ]] | planeNormalを法線ベクトルとする面へのvectorベクトルの投影ベクトルを求めます。 | |
- | | [[vci/script/reference/vector3#scale | Scale (a: Vec3, b: Vec3): Vec3 ]] | 2つのベクトルの各成分を乗算します。 | | + | | [[vci/script/reference/vector3#Angle ]] | from,toの2つのベクトルが張る角度を度数法で返す。 | |
- | | [[vci/script/reference/vector3#cross | Cross (lhs: Vec3, rhs: Vec3): Vec3 ]] | 2つのベクトルの外積を計算します。 | | + | | [[vci/script/reference/vector3#SignedAngle ]] | fromベクトルとtoベクトルの間の角度を符号付きで返します。正負はaxisの方向によって決定されます。 | |
- | | [[vci/script/reference/vector3#gethashcode | GetHashCode (): num ]] | ハッシュ値を求めます。 | | + | | [[vci/script/reference/vector3#Distance ]] | aとb、2点間の距離を計算します。 ※(a-b).magnitudeと同じ処理 | |
- | | [[vci/script/reference/vector3#reflect | Reflect (inDirection: Vec3, inNormal: Vec3): Vec3 ]] | inDirectionで指定したベクトルをinNormalで反射させます。 | | + | | [[vci/script/reference/vector3#ClampMagnitude ]] | vectorの長さを最大maxLengthに制限します。vectorの長さがmaxLength以下の場合そのまま返します。maxLength以上の場合は方向はそのまま長さがmaxLengthになるように規格化します。 | |
- | | [[vci/script/reference/vector3#normalize | Normalize (value: Vec3): Vec3 ]] | ベクトルを正規化して単位ベクトルにします。 | | + | | [[vci/script/reference/vector3#Magnitude ]] | ベクトルの長さを求めます。 | |
- | | [[vci/script/reference/vector3#dot_%E5%86%85%E7%A9%8D | Dot (lhs: Vec3, rhs: Vec3): num ]] | 2つのベクトルの内積を計算します。\\ | | + | | [[vci/script/reference/vector3#SqrMagnitude ]] | ベクトルを二乗の長さを求めます。 | |
- | | [[vci/script/reference/vector3#project | Project (vector: Vec3, onNormal: Vec3): Vec3 ]] | onNormalを基準としvectorを投影した時のベクトルを求めます。 | | + | | [[vci/script/reference/vector3#Min / Max |Min ]] | 2つのベクトルの各成分を比較して、最小の値でベクトルを作成します。 | |
- | | [[vci/script/reference/vector3#projectonplane | ProjectOnPlane (vector: Vec3, planeNormal: Vec3): Vec3 ]] | planeNormalを法線ベクトルとする面へのvectorベクトルの投影ベクトルを求めます。 | | + | | [[vci/script/reference/vector3#Min / Max |Max ]] | 2つのベクトルの各成分を比較して、最大の値でベクトルを作成します。 | |
- | | [[vci/script/reference/vector3#angle | Angle (from: Vec3, to: Vec3): num ]] | from,toの2つのベクトルが張る角度を度数法で返す。 | | + | | [[vci/script/reference/vector3#ToString ]] | 文字列に変換します | |
- | | [[vci/script/reference/vector3#signedangle | SignedAngle (from: Vec3, to: Vec3, axis: Vec3): num ]] | fromベクトルとtoベクトルの間の角度を符号付きで返します。正負はaxisの方向によって決定されます。 | | + | | [[vci/script/reference/vector3#AngleBetween ]] | 単位がラジアンのAngle。fromとtoとの間の角度をラジアンで返します。符号は付きません。 | |
- | | [[vci/script/reference/vector3#distance | Distance (a: Vec3, b: Vec3): num ]] | aとb、2点間の距離を計算します。 ※(a-b).magnitudeと同じ処理 | | + | | Exclude(非推奨) | ProjectOnPlaneと同じです。([[https://answers.unity.com/questions/25110/what-is-vector3exclude-for.html|unity4.6より非推奨のようです。]]ProjectOnPlaneを使用してください。) | |
- | | [[vci/script/reference/vector3#clampmagnitude | ClampMagnitude (vector: Vec3, maxLength: num): Vec3 ]] | vectorの長さを最大maxLengthに制限します。vectorの長さがmaxLength以下の場合そのまま返します。maxLength以上の場合は方向はそのまま長さがmaxLengthになるように規格化します。 | | + | | [[vci/script/reference/vector3#normalized ]] | ベクトルの正規化を行います。(読み取り専用) | |
- | | [[vci/script/reference/vector3#magnitude | Magnitude (vector: Vec3): num ]] | ベクトルの長さを求めます。 | | + | | [[vci/script/reference/vector3#magnitude(num) ]] | ベクトルを長さとして読み取ります。 | |
- | | [[vci/script/reference/vector3#sqrmagnitude | SqrMagnitude (vector: Vec3): num ]] | ベクトルを二乗の長さを求めます。 | | + | | [[vci/script/reference/vector3#sqrmagnitude(num) ]] | ベクトルを二乗の長さとして読み取ります。 | |
- | | [[vci/script/reference/vector3#min_max | Min (lhs: Vec3, rhs: Vec3): Vec3 ]] | 2つのベクトルの各成分を比較して、最小の値でベクトルを作成します。 | | + | |
- | | [[vci/script/reference/vector3#min_max | Max (lhs: Vec3, rhs: Vec3): Vec3 ]] | 2つのベクトルの各成分を比較して、最大の値でベクトルを作成します。 | | + | |
- | | [[vci/script/reference/vector3#tostring | ToString (): string ]] | 文字列に変換します | | + | |
- | | [[vci/script/reference/vector3#anglebetween | AngleBetween (from: Vec3, to: Vec3): num ]] | 単位がラジアンのAngle。fromとtoとの間の角度をラジアンで返します。符号は付きません。 | | + | |
- | | Exclude (excludeThis: Vec3, fromThat: Vec3): Vec3 | ProjectOnPlaneと同じです。([[https://answers.unity.com/questions/25110/what-is-vector3exclude-for.html|unity4.6より非推奨のようです。]]ProjectOnPlaneを使用してください。) | | + | |
- | | [[vci/script/reference/vector3#normalized | normalized: Vec3 ]] | ベクトルの正規化を行います。(読み取り専用) | | + | |
- | | [[vci/script/reference/vector3#magnitude1 | magnitude: num ]] | ベクトルを長さとして読み取ります。 | | + | |
- | | [[vci/script/reference/vector3#sqrmagnitude1 | sqrMagnitude: num ]] | ベクトルを二乗の長さとして読み取ります。 | | + | |
ライン 51: | ライン 48: | ||
===== 初期化について ===== | ===== 初期化について ===== | ||
- | ==== 初期化周りのメソッド ==== | + | --> 初期化周りの関数 一覧 (クリックで展開) # |
- | ^ メソッド名 ^ 説明 ^ | + | ^ 名前 ^ 説明 ^ |
| _new (x: num, y: num, z: num): Vec3 | 初期化 新しいVector3を宣言する時に使用します | | | _new (x: num, y: num, z: num): Vec3 | 初期化 新しいVector3を宣言する時に使用します | | ||
| zero: Vec3 | (0.0, 0.0, 0.0) | | | zero: Vec3 | (0.0, 0.0, 0.0) | | ||
ライン 72: | ライン 69: | ||
| z: num | ''Vec3'' の ''z'' のみにアクセスします | | | z: num | ''Vec3'' の ''z'' のみにアクセスします | | ||
+ | <-- | ||
サンプル\\ | サンプル\\ | ||
ライン 181: | ライン 178: | ||
local pos = Vector3.__new(1,1,1) | local pos = Vector3.__new(1,1,1) | ||
pos.x = pos.x + 1 | pos.x = pos.x + 1 | ||
- | pos.x = pos.y + 2 | + | pos.y = pos.y + 2 |
- | pos.x = pos.z + 3 | + | pos.z = pos.z + 3 |
print(pos.x) | print(pos.x) | ||
print(pos.y) | print(pos.y) | ||
ライン 198: | ライン 195: | ||
**変数名.アクセスしたい要素** と書きます。 | **変数名.アクセスしたい要素** と書きます。 | ||
- | ===== Slerp (球面補間) ===== | + | ===== Slerp ===== |
**Slerp (a: Vec3, b: Vec3, t: num): Vec3** | **Slerp (a: Vec3, b: Vec3, t: num): Vec3** | ||
ライン 220: | ライン 217: | ||
2つのベクトル間を t で球面補間します。t は[0, 1]の範囲です。 | 2つのベクトル間を t で球面補間します。t は[0, 1]の範囲です。 | ||
- | ===== SlerpUnclamped (球面補間) ===== | + | ===== SlerpUnclamped ===== |
**SlerpUnclamped (a: Vec3, b: Vec3, t: num): Vec3** | **SlerpUnclamped (a: Vec3, b: Vec3, t: num): Vec3** | ||
ライン 296: | ライン 293: | ||
currentの向きから、targetの向きまで回転させます。ただし、その際の最大速度はmaxRadiansDelta m/secに制限されます。 | currentの向きから、targetの向きまで回転させます。ただし、その際の最大速度はmaxRadiansDelta m/secに制限されます。 | ||
- | ===== Lerp (線形補間) ===== | + | ===== Lerp ===== |
**Lerp (a: Vec3, b: Vec3, t: num): Vec3** | **Lerp (a: Vec3, b: Vec3, t: num): Vec3** | ||
ライン 318: | ライン 315: | ||
2つのベクトル間を t で線形補間します。t は[0, 1]の範囲です。 | 2つのベクトル間を t で線形補間します。t は[0, 1]の範囲です。 | ||
- | ===== LerpUnclamped (線形補間) ===== | + | ===== LerpUnclamped ===== |
**LerpUnclamped (a: Vec3, b: Vec3, t: num): Vec3** | **LerpUnclamped (a: Vec3, b: Vec3, t: num): Vec3** | ||
ライン 364: | ライン 361: | ||
===== SmoothDamp ===== | ===== SmoothDamp ===== | ||
- | **SmoothDamp (current: Vec3, target: Vec3, currentVelocity: usertype, smoothTime: num, maxSpeed: num): Vec3** | + | **SmoothDamp (current: Vec3, target: Vec3, currentVelocity: usertype, smoothTime: num, maxSpeed: num, deltaTime: num): (Vec3, Vec3)** |
サンプル\\ | サンプル\\ | ||
<file lua main.lua> | <file lua main.lua> | ||
- | local Subitem = vci.assets.GetTransform("Subitem") | + | local target = vci.assets.GetTransform("target") |
- | local Subitem2 = vci.assets.GetTransform("Subitem2") | + | local mover = vci.assets.GetTransform("mover") |
+ | local velocity = Vector3.zero | ||
+ | local prevTime = os.time() | ||
- | local ver = Vector3.zero | + | function update() |
+ | local time = os.time() | ||
+ | local deltaTime = time - prevTime; | ||
+ | prevTime = time | ||
+ | |||
+ | local position | ||
+ | position, velocity = Vector3.SmoothDamp(mover.GetPosition(), target.GetPosition(), velocity, 1.0, math.huge, deltaTime) | ||
- | function updateAll() | + | mover.SetPosition(position) |
- | local move = Vector3.SmoothDamp(Subitem2.GetPosition(), Subitem.GetPosition(), ver, 1, 1) | + | |
- | Subitem2.SetPosition(move) | + | |
end | end | ||
- | |||
</file> | </file> | ||
実行結果\\ | 実行結果\\ | ||
<code lua> | <code lua> | ||
- | Subitem2がSubitemに向かって動きます。 | + | "mover"が"target"に向かって動きます。 |
</code> | </code> | ||
ライン 602: | ライン 604: | ||
ベクトルを方向として扱いたい場合、長さを1に揃えて方向のみの要素として扱う必要があります。 | ベクトルを方向として扱いたい場合、長さを1に揃えて方向のみの要素として扱う必要があります。 | ||
- | ===== Dot (内積) ===== | + | ===== Dot ===== |
**Dot (lhs: Vec3, rhs: Vec3): num** | **Dot (lhs: Vec3, rhs: Vec3): num** | ||
ライン 855: | ライン 857: | ||
ベクトルを二乗の長さを求めます。 | ベクトルを二乗の長さを求めます。 | ||
- | ===== Min,Max ===== | + | ===== Min / Max ===== |
**Min (lhs: Vec3, rhs: Vec3): Vec3**\\ | **Min (lhs: Vec3, rhs: Vec3): Vec3**\\ | ||
ライン 957: | ライン 959: | ||
ベクトルを方向として扱いたい場合、長さを1に揃えて方向のみの要素として扱う必要があります。 | ベクトルを方向として扱いたい場合、長さを1に揃えて方向のみの要素として扱う必要があります。 | ||
- | ===== magnitude ===== | + | ===== magnitude(num) ===== |
**magnitude: num** | **magnitude: num** | ||
ライン 978: | ライン 980: | ||
ベクトルを長さとして読み取ります。 | ベクトルを長さとして読み取ります。 | ||
- | ===== sqrMagnitude ===== | + | ===== sqrMagnitude(num) ===== |
**sqrMagnitude: num** | **sqrMagnitude: num** |