はじめに
- この記事は「From The Depths」というゲーム(以下FtD)で使用できるLuaに関する記事です。
- Luaに関心のあるFtDプレイヤーを対象としています。
ベクトルと座標
ベクトルは高校物理でやるかと思いますが、3次元空間での方向を表すのにx,y,zの3つの数字で方向を示します。
また、x,y,zで位置(=座標)を示すこともできます。
座標には、グローバル座標(ワールド座標とも)とローカル座標があります。
ローカル座標
ローカル座標はビークルの最初のブロックを基準として表されます。
右がx、上がy、前がzです。
上図にて青い棒の先のスピブロは、x=7, y=5, z=6の座標にあることになります。
LuaBoxで表示させると、以下のようになります。
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で表示させると、以下のようになります。
マップで見ると、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)が格納されます。
以下は実行結果。
自機から敵の方向をローカル座標で知るにはこれを使います。
なお、Vector3はI:Maths_CreateVector3(x,y,z)
だけでなくVector3(x,y,z)
でも作れます。
とりあえず以上。