# 座標の基本：Vector3とCFrame（位置・向き・回転）

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

- URL：https://roblox.minecraft-okinawa.com/basics/vector3-and-cframe/
- 更新日：2026-11-13

## 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）

```lua
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／置く場所：パーツの中）

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

執筆：鈴木孝昌（現役プロジェクトマネージャー／プログラミング講師）／運営：沖縄マイクラ部 プログラミングスクール「クロスウェーブ」（https://minecraft-okinawa.com/）