Unity canvas 使用网络重叠

Unity canvas overlap using networking

我正在使用新的统一网络 unity 5.3.1 ,我的播放器预制件是 UI canvas ,所以当另一个客户端加入 canvas 的重叠时,我无法按主机或客户端上的任何按钮。

我想要的是禁用每个玩家游戏中的其他 canvase,只让本地玩家 canvase 处于活动状态,我已经尝试过 islocalplayer、isclient、isserver,但没有任何效果。

有没有办法解决这个问题,请告诉。

我想通了,正如@NikaKasradze 所说,只使用一个 canvas 并将所有 gui 侦听器放在 islocalplayer bool check 中。

以下是我能想到的一些选项:

1) 不要将 canvas 设为播放器对象,而是将面板设为播放器对象,这样您所有的播放器都是相同 canvas 下的不同面板。现在,当对象在同一 canvas 下时,它们的光线投射顺序由层次结构中的顺序决定。

层次结构中 较低 的对象会遮挡较高的对象。因此,您可以做的是将您的玩家对象移动到对象层次结构中的 最低 位置,这样它就会遮挡所有其他玩家。这可以使用转换方法 SetSiblingIndex and GetSiblingIndex 来完成,例如

 transform.SetSiblingIndex(100000/*some big number*/);

2) 禁用对所有其他播放器的光线投射 - 如果您可以在 canvas 上单击某个组件会怎样,是否它是一个光线投射目标。图像和文本组件可以是光线投射目标,或者更一般地说,任何继承自 Graphics 的组件。您可以遍历除本地播放器之外的所有播放器中的所有 Graphics 类型的组件并标记 raycastTarget = false.