【Roblox Studio】コインのドロップ演出は獲得したプレイヤーだけにしたい!

実験室

LocalScriptでクライアント側に処理を任せる

  • Scriptはサーバ側で処理されるため、すべてのプレイヤーに影響があり
  • LocalScriptはクライアント側で処理されるため、自分にだけ影響があり

  • ScriptからLocalScriptに処理を移行するためのRemoteEventを追加
  • LocalScriptはStarerPlayerScriptなど特定のフォルダに配置

RemoteEventの追加

サーバからクライアントへ処理を移すトリガーとなるイベントをNPCを配置しているReplicatedStorageに追加

RemoteEvent

NPCのサーバ側ScriptのDied関数回りの修正

local remote = game.ReplicatedStorage.Reward -- RemoteEvent

npc.Humanoid.Died:Connect(function()
	walkAnim:Stop()
	
	local tag = npc.Humanoid:FindFirstChild("creator")
	
	if tag then
		local player = tag.Value --タグの値に格納されたプレイヤーを取得
		remote:FireClient(player, npc) -- クライアント側に処理を任せる
		--NPCに設定されたGoldの値をリーダーボードのGoldに加算
		player.leaderstats.Gold.Value = player.leaderstats.Gold.Value + npc.Gold.Value
		
		--[[
		local TweenService = game:GetService("TweenService")
		for i=1, 5 do --5枚のコイン生成するループ処理
			local gold = game.ReplicatedStorage.Gold:Clone()
			gold.CanTouch = false
			gold.Parent = game.Workspace
			--Headパーツの少し上にコインを出現させy軸方向に打ち上げ。xz軸はランダムにばらけさせる
			gold.Position = npc.Head.Position + Vector3.new(0, 3, 0)
			gold.Velocity = Vector3.new(math.random(-10, 10), 50, math.random(-10, 10))
			gold.coins_get:Play()--サウンドを再生
			--4秒後にフェードアウト
			local goldTween = TweenService:Create(gold, TweenInfo.new(4), {Transparency = 1})
			goldTween:Play()
			wait(0.05)
			end
			]]
	end

	wait(3)
	npc:Destroy()
end)

remote:FireClient関数は引数にクライアントを特定するためのプレイヤーが必須

カンマ区切りでクライアントに必要なパラメタを追加

クライアント側LocalScriptの追加

Reward

名前はLocalScriptのままでもとりあえずはOK

local remote = game.ReplicatedStorage.Reward
local TweenService = game:GetService("TweenService")

remote.OnClientEvent:Connect(function(npc)
	for i=1, npc.Gold.Value do -- 引数のNPCに設定されたGoldの数値分だけループ処理
		local gold = game.ReplicatedStorage:WaitForChild("Gold"):Clone()
		
		gold.CanTouch = false
		gold.Parent = game.Workspace
		gold.Position = npc.Head.Position + Vector3.new(0, 3, 0)
		gold.Velocity = Vector3.new(math.random(-10, 10), 50, math.random(-10, 10))
		gold.coins_get:Play()
		wait(0.05)
		local goldTween = TweenService:Create(gold, TweenInfo.new(4), {Transparency = 1})
		goldTween:Play()
	end
end)

OnClientEvent関数の宣言以外は基本移植しただけ

マルチプレイテスト

LocalScriptテスト

NPCを倒していないプレイヤーにはコインのドロップ演出がされないことを確認

コメント

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