-Roblox-在播放器和部件之间切换时出现某种相机故障

时间:2016-12-07 03:44:18

标签: roblox

目前我正在制作一款游戏,你可以在其中找到" L"在键盘上,它会更改为您可以控制的部分... 但奇怪的是,当它接近一个玩家(而不是产生它的玩家......)时,它会冻结。但是在其他玩家的屏幕上,它仍然可以移动。

我在玩家的背包中使用了一个本地脚本进行凸轮更换...... 当我切换到(cam.CameraSubject = part.Humanoid)时,它会执行我描述的故障/错误,包括模型中的所有其他部分。但如果我有 (cam.CameraSubject = part(模型)),它有效,但它有点滞后...... 我可以采取任何其他方式来做这个??? 我使用的那部分是否可能太小了?

1 个答案:

答案 0 :(得分:0)

我相信这是由于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)

注意:

  • 您无法设置锚定部件的网络所有者
  • 如果您设置连接到其他非固定部件的部件的网络所有者,则这些部件也将继承网络所有者更改

有关此主题的更多信息,请参阅Network Ownership上的官方ROBLOX Wiki页面。