【问题标题】:Unity canvas overlap using networkingUnity 画布重叠使用网络
【发布时间】:2016-03-10 11:47:45
【问题描述】:

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

我想要的是禁用每个玩家游戏上的其他画布,并让本地玩家画布保持活动状态,我尝试过 islocalplayer、isclient、isserver 但没有任何效果。

有没有办法解决这个问题。

【问题讨论】:

  • 我不确定您的画布与网络的关系如何,但使用多个画布总是一个坏主意,应尽可能避免。我相信你可以让你的播放器成为一个简单的 RectTransform。
  • @NikaKasradze 所以我必须手动生成我的播放器并使其成为画布的孩子? .顺便说一句,我正在制作纸牌游戏,所以我将画布制作为玩家预制件,这就是为什么我想问是否有办法以某种方式设置客户端画布,因为所有教程都显示在 islocalplayer 布尔检查中使用玩家代码。
  • @NikaKasradze 考虑让玩家成为画布的孩子,这会不会又是同样的问题,因为光线投射取决于画布中的层次结构,客户孩子将有优先权,我仍然无法点击主机?

标签: networking unity3d multiplayer


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 很酷,谢谢,如果我遇到更多问题,我也会尝试这样做,但我目前正在接受我的答案。赞成
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2016-09-21
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 2014-07-02
    • 2013-08-25
    相关资源
    最近更新 更多