Roblox はじめて体験・基礎編

第9回「障害物とパワーアップアイテムを作ろう」

RB09-07

障害物とパワーアップ
アイテムを作ろう

受講を終了する
7. 自由制作(7 / 8)
STAR AI・情報塾

自由制作に挑戦しよう

今日学んだ障害物とパワーアップアイテムを組み合わせて、自分だけのステージを作ってみましょう。

🌀 ゆれる振り子

CFrame.Anglesの数字を行ったり来たりさせると、回転ではなく「 ゆれる 」動きになります。

💥 爆発するブロック

触れた瞬間に大きなダメージを与えて、ブロック自体も消えるようにしてみましょう。

❤️ 回復アイテム

humanoid.Health を増やす(増やしすぎないよう100を超えないような工夫にも挑戦)アイテムです。

挑戦してみよう:吹っ飛ぶブロック

回転する障害物に当たった時、ダメージだけでなく「 吹き飛ばす 」演出を加えると、より迫力のある障害物になります。

local part = script.Parent
local power = 50   -- 吹き飛ばす強さ

part.Touched:Connect(function(hit)
    local humanoid = hit.Parent:FindFirstChild("Humanoid")
    local root = hit.Parent:FindFirstChild("HumanoidRootPart")

    if humanoid and root then
        local direction = (root.Position - part.Position).Unit
        root.Velocity = direction * power + Vector3.new(0, 20, 0)  -- 少し上にも飛ばす
    end
end)
ポイント Velocity(速度)に数値を与えると、その方向に一瞬force(力)が加わって吹き飛びます。powerの数字を大きくするほど、遠くまで吹き飛ぶようになります。

回転バーに当たったら本当に吹っ飛んだ!これは避けたくなる緊張感がある!

挑戦してみよう:揺れる振り子

回転ではなく「 揺れる 」動きにも挑戦してみましょう。円柱を1本(バー)、球体を1つ(おもり)用意し、WeldConstraintで固定してから、以下のようなScriptをバーの根本(支点にしたいパーツ)に入れます。

local part = script.Parent
local basePos = part.CFrame  -- 最初の向きを覚えておく
local amplitude = 45         -- 振れ幅(度)
local speed = 2               -- 揺れる速さ

game:GetService("RunService").Heartbeat:Connect(function(deltaTime)
    local time = tick() * speed
    local angle = math.sin(time) * amplitude
    part.CFrame = basePos * CFrame.Angles(0, 0, math.rad(angle))
end)
ポイント math.sin( )は「 なめらかに-1〜1を行ったり来たりする数字 」を作れる数学の道具です。これに振れ幅(amplitude)をかけることで、行き過ぎず自然に揺れ戻る振り子の動きが再現できます。仕組みは難しいので、今は「 振り子を作る時のお決まりの書き方 」として覚えておけば大丈夫です。

数式は難しいけど、動きはすごく自然な振り子になった!これは避けるタイミングを考えるのが楽しそう!

Well done!

次のステップに進みましょう!