Roblox开发:实现Proximity Prompt触发动画、限制移动及ID物品存取
完善Roblox Proximity Prompt脚本:限制移动+物品管理+动画播放
原脚本已经实现了触发时播放动画、背包内"ID"物品的暂存与归还功能,但缺少限制玩家移动的核心逻辑。以下是整合所有需求的完整优化版本:
local proximityPrompt = script.Parent local animation = script:WaitForChild("Dance") local ServerStorage = game:GetService("ServerStorage") local backpacks = {} local ID_ITEM_NAME = "ID" -- 用常量统一物品名称,方便维护 -- 玩家加入时初始化存储文件夹 game.Players.PlayerAdded:Connect(function(player) local storageFolder = Instance.new("Folder") storageFolder.Name = tostring(player.UserId) storageFolder.Parent = ServerStorage backpacks[player.UserId] = storageFolder end) -- 玩家离开时清理存储 game.Players.PlayerRemoving:Connect(function(player) local storage = backpacks[player.UserId] if storage then storage:Destroy() backpacks[player.UserId] = nil end end) -- 统一处理Proximity Prompt触发逻辑 proximityPrompt.Triggered:Connect(function(player) local character = player.Character if not character then return end local humanoid = character:WaitForChild("Humanoid") local backpack = player.Backpack local equippedTool = character:FindFirstChildWhichIsA("Tool") local playerId = player.UserId local storage = backpacks[playerId] -- 先处理物品:如果物品在背包/身上,暂存;否则归还 local hasItem = backpack:FindFirstChild(ID_ITEM_NAME) or (equippedTool and equippedTool.Name == ID_ITEM_NAME) if hasItem then -- 将物品移到存储文件夹 local itemToStore = backpack:FindFirstChild(ID_ITEM_NAME) or equippedTool itemToStore.Parent = storage else -- 从存储归还物品到背包 local storedItem = storage:FindFirstChild(ID_ITEM_NAME) if storedItem then storedItem.Parent = backpack end end -- 限制玩家移动 local originalWalkSpeed = humanoid.WalkSpeed local originalJumpPower = humanoid.JumpPower humanoid.WalkSpeed = 0 humanoid.JumpPower = 0 -- 播放动画并在结束后恢复移动 local danceAnim = humanoid:LoadAnimation(animation) danceAnim.Looped = false -- 先设置循环属性再播放,避免生效延迟 danceAnim:Play() danceAnim.Stopped:Connect(function() -- 动画结束后恢复移动能力 humanoid.WalkSpeed = originalWalkSpeed humanoid.JumpPower = originalJumpPower end) end)
关键优化说明
- 合并触发逻辑:把原脚本中两个独立的
Triggered事件监听合并为一个,避免逻辑冲突和重复触发 - 移动限制实现:
- 触发时记录玩家原有的
WalkSpeed和JumpPower - 将两者设为0,彻底限制移动和跳跃
- 绑定动画的
Stopped事件,动画结束后自动恢复玩家的移动能力
- 触发时记录玩家原有的
- 物品逻辑优化:
- 用常量
ID_ITEM_NAME统一物品名称,后续修改更方便 - 简化物品存在性判断,同时覆盖背包和手持的情况
- 用常量
- 代码结构优化:将玩家加入/离开的逻辑放在前面,触发逻辑集中处理,可读性更强
内容的提问来源于stack exchange,提问作者Rollininst_12
相关产品推荐
相关产品推荐

