久しぶりに息子くんがロブロックスのゲームを公開しました。
ロブロックスとは
ネットゲームで、遊ぶことはもちろん開発環境も公開されてるのでゴリゴリ作ることも出来ます。
↓ 過去記事。
siroitori.hatenablog.com
ロブロックスに出会ったのは1年とちょっと前ですね。時間のたつのは早いものです。
今回作ったのは車のシミュレーション
あまりゲームというゲームではないのですが、車が出会いがしらで衝突するシミュレーションを作っていました。
この車は後述しますが、公開されているモデルを改造して衝撃によって煙を出してバラバラになるものを作って使っています。
遊び方
こちらのリンクから遊べます。PC・スマホどちらでもいけるようにしています。
www.roblox.com
ワールドに入ると、ビルの上のほうにいます。
ビルから降りてもいいのですが、ここではちょっと視点だけ変えてみます。
画面左の方と中央に車がいますね。この2台が衝突事故しちゃいます。
【ボタン説明】
- Start ボタン … 車が走り出して衝突します
- Reset ボタン … 最初の位置に車がリセットされます
Start してみると、こんな風になります。
やるたびに車が壊れたり壊れなかったりと結果が違うのでいろいろやってみてください。
またいろいろな方向から衝突に遭遇し事故の目撃者となりましょう!
なんていうかただそれだけのゲームなんですが、、、
(いやゲームと呼んではいけないシミュレーションだ!と息子くんに言われました)
その他の遊び方としては、
- 道路に降りてみて車にはねられてみる
- 車に乘って操作することで衝突を回避する
などの遊び方ができます。
モジュール解説
今回クラッシュする車を作った
クラッシュタイプの車です。(蒟蒻畑じゃないよ!)
車のモデル自体は公開されているものを撮ってきただけなんですが、それを今回壁や物に追突したりして衝撃をうけたら黒煙を出してダメージが蓄積したらばらっばらになってしまうという改造をしたそうです。
ライブラリ公開しています
Roblox Studioで作成するゲームに組み込んむことが出来るようにライブラリとしても公開してますので、開発者の方どうぞ使ってみてください。コードの内部が覗けます。
↓ ここから入手できます。「Crash Script」
www.roblox.com
ライブラリの導入方法
まず、今回作成した「Crash Script」をリンクから取得します。
Crash Script - Roblox
「ゲットする」クリック
「今すぐゲット」
それが終わったら、Roblox Studioを起動してテンプレートを選択します。
ここでは「Suburban」を選択してみました。
(中にはスクリプトが組み込めないテンプレートもあるそうですのでご注意を)
Roblox Studioの画面左のほうの「Toolbox」から■が4つのマークのタブを選択すると、先ほどゲットした「Crash Script」が表示されているので、それをドラッグして中央のウインドウのどこか好きな場所に置きます。
これでゲーム内にクラッシュの車が配置できました。
乘ってみてください。壁や障害物にぶつかったらクラッシュします。
クラッシュする車に追加したスクリプト
ちなみにクラッシュする車の内部はこのようになっています。
息子くんの書いたコードBrokeScriptというスクリプトで、この中の全部自分で書いたものだそうです。
local Speed function InsertBrokeScript(Object) for _,part in pairs(Object:GetChildren()) do if part:IsA("BasePart") then if part.Parent == script.Parent.PassParts then else local Clone = script:Clone() Clone.Disabled = true Clone.Parent = part Clone.Speed.Value = Speed Clone.IsClone.Value = true Clone.Disabled = false end else InsertBrokeScript(part) end end end if not script.IsClone.Value then print("Not clone") Speed = Instance.new("IntValue") Speed.Name = "Speed" Speed.Parent = script.Parent InsertBrokeScript(script.Parent) while wait(0.1) do Speed.Value = script.Parent.PrimaryPart.Velocity.Magnitude end end if script.IsClone.Value then Damage = Instance.new("IntValue") Damage.Parent = script Damage.Name = "Damage" Damage.Value = 0 script.Parent.Touched:Connect(function(part) if game.Players:GetPlayerFromCharacter(part.Parent) == nil and game.Players:GetPlayerFromCharacter(part.Parent.Parent) == nil then Damage.Value = Damage.Value + script.Speed.Value.Value / 10 print(script.Parent:GetFullName() .. " has damaged.") if Damage.Value >= 5 then if script:FindFirstChild("Smoke") ~= nil then script.Smoke.Parent = script.Parent script.Parent.Smoke.Enabled = true end end if Damage.Value >= 10 then script.Parent:ClearAllChildren() end else print("Skipped, Debug: " .. tostring(game.Players:GetPlayerFromCharacter(part.Parent)) .. tostring(game.Players:GetPlayerFromCharacter(part.Parent.Parent))) end end) end
えーと、どういう処理をやっているのか聞いたところによると、
前半部分では、このスクリプトを車を構成するすべてのパーツにクローンして関連付けさせていて、
後半部分では、車へのダメージをカウントしていると。
ダメージ5以上だと煙を出して、10以上だと
script.Parent:ClearAllChildren()
ってやってますね。
すべてのパーツの親子関係を解消させてるようです。
要は接続している状態でなくなるということなので例えば車が車体から外れ、全部バラバラになっちゃう感じなのでしょう。
さいごに
最近OSいじりにハマってあまり作品作りというものをしていない息子くんでしたが、久々に紹介できるものを作ってくれたので紹介しました。
私の最近ハマっているM5Stackで試行錯誤して作っている隣で、息子くんはこれをさくさくっと作ってました。(がM5Stackも気になるようでちょいちょい覗かれてました)
前回は親子ペアプログラミングと書きましたが、今日は親子もくもく会でしたw
OSのほうもなかなかディープなことやってるっぽいんですがなにせ私の理解が追いつかないのでブログで説明ができないという・・・
これからも親子がんばります。
Roblox関連記事
以前公開したライブラリ
siroitori.hatenablog.com
これまでに作ったゲーム
siroitori.hatenablog.com
siroitori.hatenablog.com
siroitori.hatenablog.com
Robloxのすべての記事はこちら
siroitori.hatenablog.com
スター・はてブとても嬉しいです!