Roblox Studio协程使用报错:期望函数却获nil的解决方案求助
解决Roblox协程报错:invalid argument #1 to 'wrap' (function expected, got nil)
你遇到的问题根源是变量名冲突:Spawn函数的第一个参数取名为mob,和外部定义的mob表重名了。在Spawn函数内部,mob指代的是你传入的怪物名称字符串,而不是包含Move方法的那个表,所以mob.Move会返回nil,传给coroutine.wrap自然就触发了参数错误。
修复方法很简单,把Spawn函数的第一个参数名换掉,比如改成mobName,同时调整函数内用到这个参数的地方:
local mob = {} local ServerStorage = game:GetService("ServerStorage") function mob.Move(mob, map) local humanoid = mob:WaitForChild("Humanoid") local waypoints = map.Waypoints for waypoint=1, #waypoints:GetChildren() do humanoid:MoveTo(waypoints[waypoint].Position) humanoid.MoveToFinished:Wait() end mob:Destroy() end function mob.Spawn(mobName, map, amount) local mobExists = ServerStorage.Mobs:FindFirstChild(mobName) if mobExists then for i=1, amount do task.wait(.5) local newMob = mobExists:Clone() newMob.HumanoidRootPart.CFrame = map.Start.CFrame newMob.Parent = map.Mobs coroutine.wrap(mob.Move)(newMob, map) end else warn("No exist ", mobName) end end return mob
这样修改后,函数内部的mob就会正确指向外部的表,mob.Move就能拿到正确的函数,协程也能正常启动了。
内容的提问来源于stack exchange,提问作者code-e-ghast
相关产品推荐
相关产品推荐

