LoginSignup
1
1

More than 3 years have passed since last update.

FtDのLuaにおけるVector3の基礎

Last updated at Posted at 2019-05-21

はじめに

  • この記事は「From The Depths」というゲーム(以下FtD)で使用できるLuaに関する記事です。
  • Luaに関心のあるFtDプレイヤーを対象としています。

ベクトルと座標

ベクトルは高校物理でやるかと思いますが、3次元空間での方向を表すのにx,y,zの3つの数字で方向を示します。
また、x,y,zで位置(=座標)を示すこともできます。
座標には、グローバル座標(ワールド座標とも)とローカル座標があります。

ローカル座標

ローカル座標はビークルの最初のブロックを基準として表されます。
右がx、上がy、前がzです。
20190521174711_1.jpg

上図にて青い棒の先のスピブロは、x=7, y=5, z=6の座標にあることになります。
LuaBoxで表示させると、以下のようになります。
20190521174331_1.jpg

function Update(I)
  I:ClearLogs()
  local id = 1 -- スピブロのID
  local info = I:GetSubConstructInfo(id) -- スピブロのブロック情報を取得
  I:LogToHud(info.Position:ToString()) -- ローカル座標をログ出力
end

グローバル座標

グローバル座標は世界の中のある点を基準としてどこにあるかを示します。
基準点は、現状では初期拠点のあるマスの中心の海抜0m地点です。
FtDのグローバル座標は、東がx、上がy、北がzとなっています。

ローカル座標の例と同様に、スピブロの位置をLuaBoxで表示させると、以下のようになります。
20190521173534_1.jpg

20190521173544_1.jpg

マップで見ると、1マスの1片は5000mなので、マスのど真ん中から東に692m、南に511mくらいですね。

コードは以下。

function Update(I)
  I:ClearLogs()
  local id = 1 -- スピブロのID
  local info = I:GetSubConstructInfo(id) -- スピブロのブロック情報を取得
  I:Log(info.Position:ToString()) -- グローバル座標をログ出力
end

Vector3について

FtDのLuaでは、UnityのVector3を使用できます。3は多分3次元の3。
Vector3はベクトルや座標を扱いやすいように作られており、x,y,zなどの必要な数値と、これらを操作する関数が用意されています。
リファレンスはこちら

例えば、とある座標(x=1, y=2, z=0)から別の座標(x=3, y=5, z=10)へ向かうベクトルを算出するには、

  local vector1 = I:Maths_CreateVector3(1, 2, 0)
  local vector2 = I:Maths_CreateVector3(3, 5, 10)
  local vector3 = vector2 - vector1 -- vector2が先

と書きます。すると、内部で3 - 1と5 - 2と10 - 0が計算され、vector3には(x=2, y=3, z=10)が格納されます。
以下は実行結果。
20190521175456_1.jpg
自機から敵の方向をローカル座標で知るにはこれを使います。

なお、Vector3はI:Maths_CreateVector3(x,y,z)だけでなくVector3(x,y,z)でも作れます。
20190521180256_1.jpg

とりあえず以上。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1