LocalScriptでクライアント側に処理を任せる
- Scriptはサーバ側で処理されるため、すべてのプレイヤーに影響があり
-
LocalScriptはクライアント側で処理されるため、自分にだけ影響があり
- ScriptからLocalScriptに処理を移行するためのRemoteEventを追加
-
LocalScriptはStarerPlayerScriptなど特定のフォルダに配置
RemoteEventの追加
サーバからクライアントへ処理を移すトリガーとなるイベントをNPCを配置しているReplicatedStorageに追加
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の追加
名前は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関数の宣言以外は基本移植しただけ
マルチプレイテスト
NPCを倒していないプレイヤーにはコインのドロップ演出がされないことを確認
コメント