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

Posted

技术标签:

【中文标题】-Roblox- 在播放器和部件之间切换时出现某种相机故障【英文标题】:-Roblox- Some sort of camera glitch when switching between player and part 【发布时间】:2017-04-21 21:36:08 【问题描述】:

目前我正在制作一个游戏,你在键盘上点击“L”,它会变成你可以控制的部分...... 但奇怪的是,当它接近玩家(不是产生它的玩家......)时,它会冻结。但在其他玩家的屏幕上它仍然可以移动。

我在玩家的背包中使用了一个本地脚本来更换摄像头... 当我切换到(cam.CameraSubject = part.Humanoid)时,它会出现我描述的故障/错误,包括模型内的所有其他部分。但如果我有 (cam.CameraSubject = part(模型)),它可以工作,但它很滞后...... 我还有其他方法可以做到这一点吗??? 会不会是我用的部分太小???

【问题讨论】:

【参考方案1】:

我相信这是因为 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 页面。

【讨论】:

以上是关于-Roblox- 在播放器和部件之间切换时出现某种相机故障的主要内容,如果未能解决你的问题,请参考以下文章

在两个视图之间切换以及从纵向切换到横向时出现 iPad 方向问题,反之亦然

使用 JavaFX 切换场景时出现 InvocationTargetException

点击播放音频时出现不必要的延迟

在 Activity 中访问小部件时出现 NullPointerException

显示图像列表时出现应用小部件问题

更新文档库元数据 SPFx Web 部件时出现 InvalidClientQueryException