カワリモノ息子の技術メモ的な~

カワリモノ息子とその母の技術メモ的な〜

学校が苦手な息子くんの作品とその母の作品、はたまた日常などいろいろを在宅エンジニア母が綴る

小6息子くんRobloxで出会いがしらの車衝突シミュレーションを作った

久しぶりに息子くんがロブロックスのゲームを公開しました。

ブロックスとは

ネットゲームで、遊ぶことはもちろん開発環境も公開されてるのでゴリゴリ作ることも出来ます。

↓ 過去記事。
siroitori.hatenablog.com

ブロックスに出会ったのは1年とちょっと前ですね。時間のたつのは早いものです。

今回作ったのは車のシミュレーション

あまりゲームというゲームではないのですが、車が出会いがしらで衝突するシミュレーションを作っていました。
この車は後述しますが、公開されているモデルを改造して衝撃によって煙を出してバラバラになるものを作って使っています。

遊び方

こちらのリンクから遊べます。PC・スマホどちらでもいけるようにしています。
www.roblox.com

f:id:toriko0413:20200131212635p:plain

ワールドに入ると、ビルの上のほうにいます。

f:id:toriko0413:20200131212847p:plain

ビルから降りてもいいのですが、ここではちょっと視点だけ変えてみます。

f:id:toriko0413:20200131213004p:plain
f:id:toriko0413:20200131213022p:plain

画面左の方と中央に車がいますね。この2台が衝突事故しちゃいます。

【ボタン説明】

  • Start ボタン … 車が走り出して衝突します
  • Reset ボタン … 最初の位置に車がリセットされます

Start してみると、こんな風になります。

やるたびに車が壊れたり壊れなかったりと結果が違うのでいろいろやってみてください。
またいろいろな方向から衝突に遭遇し事故の目撃者となりましょう!

なんていうかただそれだけのゲームなんですが、、、
(いやゲームと呼んではいけないシミュレーションだ!と息子くんに言われました)

その他の遊び方としては、

  • 道路に降りてみて車にはねられてみる
  • 車に乘って操作することで衝突を回避する

などの遊び方ができます。

モジュール解説

今回クラッシュする車を作った

クラッシュタイプの車です。(蒟蒻畑じゃないよ!)
車のモデル自体は公開されているものを撮ってきただけなんですが、それを今回壁や物に追突したりして衝撃をうけたら黒煙を出してダメージが蓄積したらばらっばらになってしまうという改造をしたそうです。

ライブラリ公開しています

Roblox Studioで作成するゲームに組み込んむことが出来るようにライブラリとしても公開してますので、開発者の方どうぞ使ってみてください。コードの内部が覗けます。

↓ ここから入手できます。「Crash Script」
www.roblox.com

ライブラリの導入方法

まず、今回作成した「Crash Script」をリンクから取得します。
Crash Script - Roblox

f:id:toriko0413:20200131220716p:plain
「ゲットする」クリック

f:id:toriko0413:20200131220737p:plain
「今すぐゲット」

それが終わったら、Roblox Studioを起動してテンプレートを選択します。
f:id:toriko0413:20200131174859p:plain
ここでは「Suburban」を選択してみました。
(中にはスクリプトが組み込めないテンプレートもあるそうですのでご注意を)

f:id:toriko0413:20200131220308p:plain

Roblox Studioの画面左のほうの「Toolbox」から■が4つのマークのタブを選択すると、先ほどゲットした「Crash Script」が表示されているので、それをドラッグして中央のウインドウのどこか好きな場所に置きます。
f:id:toriko0413:20200131220532p:plain

これでゲーム内にクラッシュの車が配置できました。
乘ってみてください。壁や障害物にぶつかったらクラッシュします。


クラッシュする車に追加したスクリプト

ちなみにクラッシュする車の内部はこのようになっています。
息子くんの書いたコード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



スター・はてブとても嬉しいです!