【Roblox Studio】親子でアスレチックゲームを作ろう!ギミック・チェックポイント・遊びやすいコース作り【第2回】

    前回は、Roblox Studioを使ってマップを作り、ゲーム作りの第一歩を踏み出しました。

    今回は、いよいよアスレチックゲームらしくしていきます!

    おけ

    ジャンプする床や回転する床、スピードアップ床など、子どもが「もう一回やりたい!」と思えるギミックを追加しながら、チェックポイントも設置して、最後まで遊べるゲームを完成させていきましょう。

    この記事では、初心者でもそのまま使えるスクリプトを公開しながら、わが家で実際に作ってみて分かった「遊びやすいアスレチックの作り方」も紹介します。

    実際にテストプレイをしてみると、ギミックを連続して配置すると大人でも難しすぎることが判明!子どもが楽しみながら最後まで遊べるコースにするための工夫も、実例を交えながら解説します。

    記事の後半では、子どもたちが自由に飾り付けした我が家のアスレチックも紹介するので、「こんなコースにしたい!」というアイデア探しにもぜひ役立ててくださいね。

    まずはマップ作りから始めたい方は、第1回の記事をご覧ください。Roblox Studioの基本操作から、ゲームの土台作りまで詳しく解説しています。

    目次

    全4回のスケジュールを確認しよう

    このシリーズでは、Roblox Studioを使って親子でオリジナルゲームを作る方法を、全4回に分けて紹介しています。

    • 第1回:ゲームの土台となるマップ作り
    • 第2回:アスレチック・ギミック・チェックポイント作成(今回)
    • 第3回:BGMやクリア演出を追加
    • 第4回:ゲームを公開して遊んでもらおう

    今回は、ゲームらしさが一気にアップするアスレチック作りに挑戦します!

    ギミックなしのアスレチックを作ろう

    いきなりギミックを追加する前に、まずはジャンプや細道、坂道など、基本となるアスレチックを作ってみましょう。

    難しいことを考えず、まずは「ジャンプして進めるコース」を作るだけでも十分楽しめます。

    今回は、

    • ジャンプアスレチック
    • 細道
    • 坂道

    の3種類を組み合わせながらコースを作っていきます。

    子どもは自由な発想でコースを作るのが得意なので、「ここは難しくしたい!」「ここは大きくジャンプしたい!」など、親子で相談しながら作るのがおすすめです。

    イチ

    柴犬いっぱい置こーっと✧*。٩(ˊᗜˋ*)و✧*。

    おけ

    なぜ?

    ブロックだけじゃなくて、オブジェでジャンプアスレチックを作るのもありです。

    子供らしい発想力で作ってもらいましょう。

    細道や坂道は前回紹介したようにパーツを引き伸ばして、回転することで作ることができます。

    ギミックを追加してみよう

    基本のコースができたら、いよいよギミックを追加します。

    今回は次の5種類を作ります。

    • 回転床
    • 昇降床
    • ジャンプ台
    • ダメージ床
    • スピードアップ床

    どれもスクリプトを貼り付けるだけで動かせるので、プログラミングが初めてでも安心です。

    それぞれ動きが違うので、実際にテストプレイしながらお気に入りのギミックを探してみてください。

    共通:スクリプトの入れ方

    まずはパーツを挿入し、エキスプローラからパーツを右クリック。

    名前を変更を押して名称をわかりやすいものに変えます。

    今回は回転床にしました。

    次にまた右クリックを押して、挿入→オブジェクトを挿入を押します。

    「script」を選びます。見当たらなかったら検索まどでscriptと入れると出てきます。

    するとこんな画面がでてきます。

    1行目に

    print(“hello world”)

    と出ていますが、これを全部消して、ここのブログ紹介するスクリプトをコピーしてここに貼り付けるだねです。

    見ての通り、英語なので理解しようと思えばできるかと思います。

    大抵は

    〇〇が◯◯に触れた時〇〇する

    そのあと

    〇〇になる

    とか

    もし〇〇が✖️✖️なら◽︎◽︎

    とか書いてあります。

    もし、お子様とスクラッチで遊んだ事があれば理解しやすいかと思います。

    話がそれました。

    まあ、細かいことはさておき、次のパーツを作ってみてください。一個作ってストックしておけば、あとはコピペで増やせるので子供達が自由にギミック床を配置する事ができます(`・∀・´)ノ

    回転床

    ぐるぐると並行に回る床です。

    動画じゃなくてとても分かりにくいですが、こんな感じ。

    local RunService = game:GetService("RunService")
    local floor = script.Parent
    
    local rotationSpeed = 45 -- 1秒間に回る角度
    
    RunService.Heartbeat:Connect(function(deltaTime)
    	floor.CFrame = floor.CFrame * CFrame.Angles(
    		0,
    		math.rad(rotationSpeed * deltaTime),
    		0
    	)
    end)

    昇降床

    上下に昇降する床です。昇降する高さ、上下についた時に止まっている時間も自由に設定できる。

    昇降する高さが大きすぎるとバグが起きやすくなるので要注意。

    回転と昇降がつくだけで一気にマリオの空中ステージのような雰囲気に。

    local TweenService = game:GetService("TweenService")
    local platform = script.Parent
    
    local startPosition = platform.Position
    local height = 50 -- 上昇する高さ
    local moveTime = 3 -- 片道にかかる秒数
    local waitTime = 4 -- 上下で止まる秒数
    
    local tweenInfo = TweenInfo.new(
    	moveTime,
    	Enum.EasingStyle.Linear,
    	Enum.EasingDirection.InOut
    )
    
    local upTween = TweenService:Create(
    	platform,
    	tweenInfo,
    	{Position = startPosition + Vector3.new(0, height, 0)}
    )
    
    local downTween = TweenService:Create(
    	platform,
    	tweenInfo,
    	{Position = startPosition}
    )
    
    while true do
    	upTween:Play()
    	upTween.Completed:Wait()
    
    	task.wait(waitTime)
    
    	downTween:Play()
    	downTween.Completed:Wait()
    
    	task.wait(waitTime)
    end

    昇降の最中はバグなのか下にすり抜けちゃうことがあるので、上下で止まる秒数でガガーッと走り抜ける感じ。

    ジャンプ台

    触れてジャンプ(スペースキー)を押すと跳ね上がるギミック。高さの設定ができます。

    赤いベロが120、ピンクのベロが170に設定しておきました。
    ジャンプした瞬間にかなり跳ねるのでテストプレイの時に大爆笑をかっさらいました。

    local Players = game:GetService("Players")
    
    local jumpPad = script.Parent
    local cooldown = {}
    
    jumpPad.Touched:Connect(function(hit)
    	local character = hit:FindFirstAncestorOfClass("Model")
    	if not character then
    		return
    	end
    
    	local player = Players:GetPlayerFromCharacter(character)
    	if not player or cooldown[player] then
    		return
    	end
    
    	local humanoid = character:FindFirstChildOfClass("Humanoid")
    	if not humanoid then
    		return
    	end
    
    	cooldown[player] = true
    
    	local oldUseJumpPower = humanoid.UseJumpPower
    	local oldJumpPower = humanoid.JumpPower
    
    	humanoid.UseJumpPower = true
    	humanoid.JumpPower = 120
    	humanoid.Jump = true
    
    	task.wait(0.3)
    
    	humanoid.JumpPower = oldJumpPower
    	humanoid.UseJumpPower = oldUseJumpPower
    
    	task.wait(0.5)
    	cooldown[player] = nil
    end)

    ダメージ床

    触れるとゲームオーバーになる床。ゲームオーバーになるとチェックポイントから再挑戦できるので高所から落ちちゃったら意図的にこの床に触れて上の方のチェックポイントから再開することができます。

    下の赤い溶岩のようなところです。わかりやすく色は赤、素材は石にしてみました。

    local damageFloor = script.Parent
    
    damageFloor.Touched:Connect(function(hit)
    	local character = hit:FindFirstAncestorOfClass("Model")
    	if not character then
    		return
    	end
    
    	local humanoid = character:FindFirstChildOfClass("Humanoid")
    	if humanoid then
    		humanoid.Health = 0
    	end
    end)

    スピードアップ床

    触れると速度アップする床。他のゲーム作りにも使いやすいですね。

    これまた画像で分かりにくくてすみません。
    氷の上みたいにつるつるつるーっとスピードアップして急に止まれなくなります。

    我が家のように一方橋にしても、飛び石にしても楽しいかも。

    local speedPad = script.Parent
    local normalSpeed = 16
    local boostSpeed = 40
    
    speedPad.Touched:Connect(function(hit)
    	local character = hit:FindFirstAncestorOfClass("Model")
    	if not character then return end
    
    	local humanoid = character:FindFirstChildOfClass("Humanoid")
    	if humanoid then
    		humanoid.WalkSpeed = boostSpeed
    
    		task.wait(2)
    
    		if humanoid then
    			humanoid.WalkSpeed = normalSpeed
    		end
    	end
    end)

    チェックポイントを設置しよう

    アスレチックが長くなるほど、途中で落ちて最初からやり直しになると大変です。

    そこで活躍するのがチェックポイント。
    一定の場所まで進んだら、ダメージ床に触る事でその地点から再開できるようになります。

    子どもでも最後まで遊びやすくなるので、長いコースを作るときにはぜひ設置しておきましょう。

    チェックポイントは

    ここの+ボタンからSpawnLocationを選択、挿入します。

    SpawnLocationの名前をcheckpointへ変更し、
    先ほどと同様Scriptを挿入します。

    Scriptの1行目を消してこちらをコピペして貼り付ければOK!

    local Players = game:GetService("Players")
    local checkpoint = script.Parent
    
    checkpoint.Touched:Connect(function(hit)
    	local character = hit:FindFirstAncestorOfClass("Model")
    	if not character then
    		return
    	end
    
    	local humanoid = character:FindFirstChildOfClass("Humanoid")
    	if not humanoid then
    		return
    	end
    
    	local player = Players:GetPlayerFromCharacter(character)
    	if not player then
    		return
    	end
    
    	player.RespawnLocation = checkpoint

    遊びやすいアスレチックを作るコツ

    実際に家族でテストプレイしてみると、一つ気付いたことがありました。
    最初は、

    ギミック → ギミック → ギミック

    というように並べていたのですが、難易度が高すぎてまぁークリアできない。
    ゲームが得意な長女でも難しすぎる。
    そこで、

    ギミック → 通常床 → ギミック

    というように普通の足場を間に入れてみると、一気に遊びやすくなりました。

    少し休憩できる場所があることで、次のギミックに集中しやすくなり、子どもたちも最後まで楽しそうに遊んでいました。

    おけ

    難しくするだけではなく、「気持ちよくクリアできるコース」を意識すると、もっと面白いゲームになりますよ(‘ω’)ノ

    オブジェクトを使って世界を作ろう

    コースが完成したら、最後は自由に飾り付けをしてみましょう。

    Roblox Studioには木や岩、建物、乗り物など、たくさんのオブジェクトが用意されています。
    我が家でも子どもたちが好きなオブジェクトをどんどん配置して、とてもにぎやかなアスレチックになりました。

    中はカオス、外はさわやか。なぜ。

    ゲーム作りに正解はありません。

    「ここに動物を置こう!」「この場所は公園みたいにしよう!」

    そんな自由な発想こそが、オリジナルゲームの一番の魅力です。

    我が家のアスレチックを紹介

    最後に、実際に完成したアスレチックを紹介します。

    コースは色々選べます。

    • 右に行けばエレベーターを使ったタイミングコース。左にいけば長女こだわりの柴犬ジャンプアスレチック。
    • そのあと回転床→一本橋
    • 昇降中に動くと落ちてしまうため、だるまさんが転んだ感のある階段エレベーター
    • 柴犬ベロのジャンプ台
    • スピード床の一本橋

    です。

    ギミックを配置するだけでなく、子どもたちが自由に考えた装飾も加わり、世界に一つだけのゲームになりました。

    テストプレイでは、「ここは難しすぎるね」「ここはジャンプしやすい!」と何度も調整を繰り返しました。
    完成したゲームを家族みんなで遊ぶ時間は、ゲームをプレイするだけでは味わえない楽しさがあります。

    ぜひ皆さんも、自分だけのアスレチックゲームを作ってみてください。

    まとめ

    今回は、アスレチックゲーム作りに欠かせない基本コースやギミック、チェックポイントの作り方を紹介しました。

    さらに、実際に遊んでみて分かった「遊びやすいコース作りのコツ」もお伝えしました。
    次回は、スタート画面やクリア演出などを追加して、さらにゲームらしい作品へ仕上げていきます。

    ぜひ続きも一緒に作っていきましょう!

    ランキング参加中!

    ポチるとよろこびます にほんブログ村 にほんブログ村へ
    にほんブログ村
    よかったらシェアしてね!
    • URLをコピーしました!
    目次