座標の基本:Vector3とCFrame(位置・向き・回転)

初級座標更新日:2026年11月13日Luauの型チェック済み

ひとことで言うと

ロブロックス(Roblox)では、位置や大きさをVector3(X・Y・Zの3つの数)で、位置と向きをまとめてCFrameで表します。Yが高さ、XとZが水平方向です。回転は角度をmath.radでラジアンに変えて使います。

この記事で使うAPI

Vector3・CFrame・BasePart・RunService・math

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)のように、度をラジアンに変換して指定します。

執筆・動作確認:鈴木孝昌官公庁のWeb・システム開発を担当する現役プロジェクトマネージャー。沖縄マイクラ部 クロスウェーブで、ロブロックス(Roblox)・マインクラフト(マイクラ)・Scratchなどのプログラミングを指導。マイクラカップ沖縄代表チームを指導(第6回・第7回、第7回TBS賞)。
沖縄マイクラ部で、子どもたちにロブロックス(Roblox)やマインクラフト(マイクラ)のプログラミングを教えています。プロフィールと編集方針
Instagramで教室の様子を見る
noteで記事を読む