Roblox はじめて体験・基礎編

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

RB09-05

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

受講を終了する
5. 回転する障害物(5 / 8)
STAR AI・情報塾

回転する障害物を作ろう

細長いブロックを1つ作り、ダメージScriptを入れてから、さらに回転させる命令を追加してみましょう。

local part = script.Parent
local damageAmount = 10

-- 回転させ続ける
while true do
    part.CFrame = part.CFrame * CFrame.Angles(0, math.rad(5), 0)
    wait(0.03)
end
今は詳しく理解しなくてOK CFrame は、位置に加えて「 向き 」も一緒に扱う特別な値です。CFrame.Angles(0, math.rad(5), 0) は「 Y軸を中心に5度分回転する 」という意味ですが、今は「 このおまじないを書けば回転する 」というレベルで大丈夫です。仕組みは今後の回でもっと詳しく学びます。
X・Y・Zってどの向き? 3Dの回転には X・Y・Z の3つの軸があります。イメージしにくい時は、ブロックに串を刺すところを想像してみましょう。串をどの向きに刺すかで、回転する方向が変わります。今回は縦(Y軸)に串を刺して、コマのように回転させています。

回転には、調整できる3つのポイントがあります。

調整ポイント変え方
① 速さmath.rad(5)の数字を大きくすると速く回転します
② なめらかさwait(0.03)の数字を小さくすると、より滑らかに回転します
③ 回転方向CFrame.Anglesのどの位置(X・Y・Zどれか)に数字を入れるかで、串を刺す向きが変わります

串を刺すイメージで考えたら、どっちの軸に回るか分かりやすくなった!

1つのScriptには、こんな風にwhile true do の回転処理とTouched のダメージ処理を両方入れることができます。2つとも独立して同時に動きます。

local part = script.Parent
local damageAmount = 10

part.Touched:Connect(function(hit)
    local humanoid = hit.Parent:FindFirstChild("Humanoid")
    if humanoid then
        humanoid.Health = humanoid.Health - damageAmount
    end
end)

while true do
    part.CFrame = part.CFrame * CFrame.Angles(0, math.rad(5), 0)
    wait(0.03)
end
動作確認クリップ挿入予定(09-clip02.mp4) 回転しながらダメージを与える障害物バー(15秒程度)

回転しながらダメージも出るようになった!一気にゲームっぽくなったわ!

Well done!

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