コイン集めゲームを開発。Part3.コインカウント|Robloxゲーム制作

RobloxStudioで「簡単なコイン集めゲーム」の制作Part3を進めていきます。今回はスクリプトで触ったコインをカウントするのを実装していきます。

はじめに

Part3を作成していきます。Part1は下記から。

Part1,Part2でゲームに必要なパーツを設置しました。Part3ではスクリプトで機能を作成していきます。

ゲーム作成開始

まずはプレイヤーがコインに触れたとき、コインが消えるようにします。

コインを消す

エクスプローラ「ServerScriptService」の横の「+」からScriptを追加します。追加したScriptの名前を「CoinPickup」に変更します。

まずはコイン一つだけを対象に作成するので、1つだけcoinの名前をPcoinに変更します。

CoinPickupを開いて、中身を下記に変更します。

local pcoin = game.Workspace.Coins.Pcoin

local function onCoinPickup (otherPart)

	local humanoid = otherPart.Parent:FindFirstChild("Humanoid")
	local player = game.Players:GetPlayerFromCharacter(otherPart.Parent)
	
	if humanoid and player then
		pcoin:Destroy()
	end
end

pcoin.Touched:Connect(onCoinPickup)

簡単に説明すると、「onCoinPickup」という名前の関数を作成。コインのパーツ(Pcoin)に触れたときに関数を呼び出すようにしています「pcoin.Touched:Connect(onCoinPickup)」。

「onCoinPickup」では、触れた相手がプレイヤーかどうかを確認して、プレイヤーの場合パーツを消しています。

実行してプレイヤーがコインに触れたときに消えたらOK

次にCoinsフォルダ内の全てのcoinに適用していきます。名前をPcoinからcoinに戻します。

スクリプトを下記に変更します。

local coins = game.Workspace.Coins
local coinschildren = coins:GetChildren()

for i, coin in coinschildren do
	coin.Touched:Connect(function(otherPart)
		local humanoid = otherPart.Parent:FindFirstChild("Humanoid")
		local player = game.Players:GetPlayerFromCharacter(otherPart.Parent)

		if humanoid and player then
			coin:Destroy()
		end
	end)	
end

coins配下のパーツ全てに適用しています。

コインの数をカウントする

次にコインに触れたときにコインの数をカウントします。Robloxではリーダーボードシステムが用意されており、下記のようにプレイヤー名の隣に表示することが出来ます。

CoinPickupスクリプトはプロパティからEnabledのチェックを外して一時的に無効にしておきます。「Coins」の欄を表示する仮のスクリプトを追加します。

追加した「Script」の中身を下記に変更します。

local Players = game:GetService("Players")

local function onPlayerAdded(player)
	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats"
	leaderstats.Parent = player

	local coins = Instance.new("IntValue")
	coins.Name = "Coins"
	coins.Parent = leaderstats
end

Players.PlayerAdded:Connect(onPlayerAdded)

下記の公式ドキュメントのデフォルトの使い方になります。

実行してみて、「Coins」欄が表示されたらOKです。仮で作成したScriptを削除して、CoinPickupスクリプトを下記に変更。プロパティのEnabledにチェックを入れると完成です。

local coins = game.Workspace.Coins
local Players = game:GetService("Players")

local function onPlayerAdded(player)
	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats"
	leaderstats.Parent = player

	local coins = Instance.new("IntValue")
	coins.Name = "Coins"
	coins.Parent = leaderstats
end

local coinschildren = coins:GetChildren()
for i, coin in coinschildren do
	coin.Touched:Connect(function(otherPart)
		local humanoid = otherPart.Parent:FindFirstChild("Humanoid")
		local player = game.Players:GetPlayerFromCharacter(otherPart.Parent)

		if humanoid and player then
			local leaderstats = player:FindFirstChild("leaderstats")
			local coins = leaderstats:FindFirstChild("Coins")
			coins.Value += 1
			coin:Destroy()
		end
	end)
end

Players.PlayerAdded:Connect(onPlayerAdded)

コインに触れるとコインの数が増えていけばOKです。

あとがき

Roblox初めの一歩という感じで作成してみました。スクリプトなど最適な書き方ではないですが、とりあえず初めてなので動けばOKです。

時間制限をかけたり、全てのコインを取得したらリセットをかけるなど、更に機能を追加していくことでゲームらしさが出てきます。

また、今回のコイン集めは、テンプレートにある「Platformer」を参考にしながら作成しました。

タイトルとURLをコピーしました