座標の基本:Vector3とCFrame(位置・向き・回転)
初級座標更新日:2026年11月13日Luauの型チェック済み
ひとことで言うと
ロブロックス(Roblox)では、位置や大きさをVector3(X・Y・Zの3つの数)で、位置と向きをまとめてCFrameで表します。Yが高さ、XとZが水平方向です。回転は角度をmath.radでラジアンに変えて使います。
この記事で使うAPI
Vector3:3つの数で表す
Vector3.new(0, 10, 0) は「X=0、Y=10(高さ10)、Z=0」の位置です。大きさ(Size)や、飛ばす速度にもVector3を使います。
CFrame:位置と向きをまとめて表す
パーツを回転させるときは、CFrameを使います。CFrame.Angles(x, y, z) は回転を表し、角度はラジアンで指定します。度で考えたいときは math.rad(45) のように変換します。
(Script/置く場所:ServerScriptService)
local part = Instance.new("Part")
part.Anchored = true
part.Position = Vector3.new(0, 10, 0)
part.CFrame = CFrame.new(0, 10, 0) * CFrame.Angles(0, math.rad(45), 0)
part.Parent = workspace
local distance = (part.Position - Vector3.new(0, 0, 0)).Magnitude
print(distance)
距離を求める
2つの位置の差のMagnitude(長さ)が、2点の距離です。上の例では、パーツと原点(0, 0, 0)の距離を表示しています。
動かし続ける
(Script/置く場所:パーツの中)
local RunService = game:GetService("RunService")
local part = script.Parent :: BasePart
part.Anchored = true
RunService.Heartbeat:Connect(function(deltaTime)
part.CFrame = part.CFrame * CFrame.Angles(0, math.rad(90) * deltaTime, 0)
end)
Heartbeat(毎フレームのイベント)で少しずつCFrameを回すと、パーツが回り続けます。deltaTime(前のフレームからの経過時間)をかけると、パソコンの性能に関係なく同じ速さで回ります。
よくあるつまずき
- Positionを変えたのにパーツが落ちる:Anchored(固定)をtrueにしていないと、重力で落ちます。
- 回転が思ったより大きい:CFrame.Anglesは度ではなくラジアンです。math.radを忘れないようにしましょう。
よくある質問
Q. ロブロックス(Roblox)で高さを表すのはX・Y・Zのどれですか?
A. Yが高さ(上下)を表します。XとZは水平方向です。
Q. CFrame.Anglesに45を入れたら回りすぎました。
A. CFrame.Anglesの角度はラジアンです。math.rad(45)のように、度をラジアンに変換して指定します。