Roblox脚本报错attempt to index number with 'Spawner'寻求解决
解决“attempt to index number with 'Spawner'”报错
ServerScriptService.Main.Mob:28: attempt to index number with 'Spawner'
问题根源
报错出现在第28行 newMob.HumanoidRootPart.CFrame = map.Spawner.CFrame,说明此时map变量是数字类型,而非你预期的包含Spawner属性的地图对象。核心原因是调用mob.Spawn函数时参数顺序传错了——你大概率把quantity(数字类型的生成数量)和map(对象类型的地图实例)的位置搞反了,导致map参数接收到的是数字,自然无法访问Spawner属性。
另外你的代码还有两处逻辑/语法错误需要修正:
mob.Move函数错误使用script.Parent获取怪物对象,克隆后的怪物和脚本父级无关,应该用传入的mob参数zombieHumanoid.Died:Connect()语法错误,Connect方法必须传入一个函数,当前写法没有绑定任何处理逻辑
解决方案
- 检查
mob.Spawn的调用代码:确保调用时参数顺序为mob.Spawn(怪物名称, 生成数量, 地图对象),示例:mob.Spawn("Zombie", 5, workspace.Map) - 修正
mob.Move函数的逻辑与语法:- 改用传入的
mob参数获取怪物的Humanoid - 正确绑定
Died事件的处理函数
- 改用传入的
修正后的完整代码
local ServerStorage = game:GetService("ServerStorage") local mob = {} function mob.Move(mobObj, map) -- 使用传入的mobObj参数获取Humanoid local zombieHumanoid = mobObj.Humanoid -- 正确绑定Died事件的处理函数 zombieHumanoid.Died:Connect(function() mobObj:Destroy() end) end function mob.Spawn(name, quantity, map) local mobExists = ServerStorage.Mobs:FindFirstChild(name) if mobExists then for i=1 , quantity do task.wait(0.5) local newMob = mobExists:Clone() newMob.HumanoidRootPart.CFrame = map.Spawner.CFrame newMob.Parent = map.Mob coroutine.wrap(mob.Move)(newMob, map) end else warn("Requested mob does not exist:", name) end end return mob
内容的提问来源于stack exchange,提问作者Tommy Dang
相关产品推荐
相关产品推荐

