0

我正在测试 UNET 和 UI。当我在场景中放置一个面板时,它在主机客户端中是可以的,但面板在远程客户端上有另一个位置。

我正在使用锚点等。

谁能解释一下?

主机客户端 主机客户端

远程客户端 远程客户端

锚点 在此处输入图像描述

4

1 回答 1

1

老问题,但仍然有用回答。

有两种主要可能性。最简单的是画布没有设置为正确适应屏幕分辨率/窗口大小。在这种情况下,远程 vs 客户端是一个红鲱鱼,这仅仅是因为您在一种尺寸上进行创作,然后在另一种尺寸上进行查看。我喜欢将我的画布设置为“随屏幕大小缩放”并匹配高度 100%,尽管这取决于您的游戏。

另一个更隐蔽的可能性是 UI 面板的 RectTransform 正在被服务器修改。当面板附加了 NetworkBehaviour 并且服务器和客户端以不同的屏幕尺寸/分辨率运行时,可能会发生这种情况。UI Canvas 实际上是一个存在于 3D 空间中的对象。它的比例看起来有点随意,并且在 CanvasScaler 调整 UI 以匹配窗口时设置。任何 NetworkBehaviour 对象在构建场景时都被禁用,并在由服务器生成时启用。这个生成过程将世界转换设置为服务器提供的值,但当然这完全取决于服务器上的 CanvasScaler。

目前,生成的场景对象在它们的位置等设置之前启用(我不能保证总是这样)。因此,您可以通过将 RectTransform 的 anchoredPosition和 localScale存储Awake()中来解决此问题。然后,您可以在OnStartClient()中重新应用这些。或者,您可以将所有网络行为附加到根画布,而不是作为子对象。

我希望对某人有所帮助

于 2017-07-19T13:32:56.017 回答