-Roblox-在玩家和零件之间切换时,某种相机故障



当前我正在制作键盘上" L"的游戏,并且它更改为您可以控制的部分...但是奇怪的是,当它接近玩家(不是催生它的玩家...)时,它会冻结。但是在另一个玩家的屏幕上它仍然可以移动。

我在玩家背包中使用了本地脚本进行凸轮更改...当我切换到(cam.camerasubject = part.humanoid)时,它会执行我描述的故障/错误,包括模型中的所有其他部分。但是如果我有(cam.camerasubject = part(模型)),它有效,但它很懒惰...我可以做任何其他方法吗???我使用的部分是否太小?

我相信这是由于Roblox如何模拟物理学。当零件进行物理模拟时,模拟零件的实际工作将委派给最接近的客户端。此距离是基于玩家角色在游戏世界中的位置。如果没有播放器关闭,则服务器本身负有模拟零件的职责。

因此,如果您有一个播放器正在控制的部分,则该零件实际上可能是实际上由另一个玩家的计算机控制的,如果它更近。这可能就是为什么当您的部分与另一个玩家接近时似乎会冻结的原因。


解决方案: setnetworkowner

前一段时间,Roblox添加了一些有用的方法,使游戏开发人员可以覆盖我上面描述的默认物理代表团。通过使用BasePart:SetNetworkOwner(player),您可以指示哪些客户应负责处理对象的物理。

因此,您需要做的就是获取服务器端脚本以在您提到的该控制部分上调用SetNetworkOwner

controlPart:SetNetworkOwner(player)

这是一个例子。当玩家进入时,将创建零件并分配给玩家。请注意如何使用SetNetworkOwner。当玩家离开时,零件被摧毁:

local controlPart = Instance.new("Part")
local controlParts = {}
function PlayerAdded(player)
    local part = controlPart:Clone()
    part.Parent = game.Workspace
    controlParts[player] = part
    -- Set the network owner to the player:
    part:SetNetworkOwner(player)
end
function PlayerRemoving(player)
    local part = controlParts[player]
    if (part) then
        part:Destroy()
    end
    controlParts[player] = nil
end
game.Players.PlayerAdded:connect(PlayerAdded)
game.Players.PlayerRemoving:connect(PlayerRemoving)

注意:

  • 您无法设置锚定部分的网络所有者
  • 如果您设置了连接到其他未经常规零件的零件的网络所有者,这些零件也将继承网络所有者更改

请参阅网络所有权上的Roblox Wiki页面以获取有关此主题的更多信息。

最新更新