为什么脚本认为这个Vector3位置是一个玩家?

我正在尝试完成一个游戏的枪械脚本,我已经放弃了很多东西。这一次,我觉得我可以完成脚本。但是,当我检查输出时,它说我正在尝试使用一个Instance而不是Vector3。当我看了一下,我很快意识到脚本认为它是一个玩家。发生了什么?

script.Parent.Shoot.OnServerEvent:Connect(function(posofm) -- 我使用一个LocalScript来获取鼠标的位置(mouse.Hit.Position)
    bullet = Instance.new("Part")
    bullet.Parent = workspace
    bullet.Size = Vector3.new(0.3,0.3,1)
    bullet.BrickColor = BrickColor.Yellow()
    bullet.Position = script.Parent.Handle.Position
    bullet.CFrame = CFrame.lookAt(bullet.Position,posofm)
    bullet.Velocity = bullet.CFrame.LookVector * 90
end)

原文链接 https://stackoverflow.com/questions/71299579

点赞
stackoverflow用户2860267
stackoverflow用户2860267

请查看 RemoteEvent.OnServerEvent 的文档。连接提供的第一个参数始终是调用 RemoteEvent:FireServer() 的玩家。

例如:

-- 当 LocalScript 调用 FireServer 时:
event:FireServer(a, b, c)

-- 服务器脚本接收:
event.OnServerEvent:Connect(function(player, a, b, c) ... end)

因此,在你的情况下,即使变量的名称为 posofm,由于它是列表中的第一个参数,它代表了玩家对象。实际的鼠标位置被忽略了,因为函数中没有参数来存储它。

因此,要修复它,你只需在连接中添加一个参数来表示玩家,并正确标记你的参数:

script.Parent.Shoot.OnServerEvent:Connect(function(player, posofm)
2022-02-28 19:15:59