Unity3d 当放置在另一个按钮上时,gui上的按钮不可点击,为什么?

Unity3d 当放置在另一个按钮上时,gui上的按钮不可点击,为什么?,unity3d,Unity3d,我有两个按钮。一个按钮非常大,也是一个背景(它是一张地图)。另一个是出现在背景按钮顶部的按钮 我的想法是,当点击背景(世界地图)时,做一件事。然后单击较小的按钮,例如代表一个城市,执行其他操作。我的第二个按钮在第一个按钮之后调用,显示正确,但不可点击 即使第二个按钮出现在第一个按钮的顶部,单击它也不会激活它。相反,只会单击背景。这是我的密码: // WorldMap map box if (GUI.Button(new Rect(_mapWidthStart, _

我有两个按钮。一个按钮非常大,也是一个背景(它是一张地图)。另一个是出现在背景按钮顶部的按钮

我的想法是,当点击背景(世界地图)时,做一件事。然后单击较小的按钮,例如代表一个城市,执行其他操作。我的第二个按钮在第一个按钮之后调用,显示正确,但不可点击

即使第二个按钮出现在第一个按钮的顶部,单击它也不会激活它。相反,只会单击背景。这是我的密码:

        // WorldMap map box
        if (GUI.Button(new Rect(_mapWidthStart, _mapHeightStart, _mapAreaDimensions, _mapAreaDimensions), "", _standardGuiSkin.GetStyle("WorldMap_box_2")))
        {
            var y = ((Input.mousePosition.y * (ScrnHeight / Screen.height)) - _mapHeightStart) * (CurrentPlanetObject.Height / _mapAreaDimensions);
            var x = (Input.mousePosition.x * (ScrnWidth / Screen.width) - _mapWidthStart) * (CurrentPlanetObject.Width / _mapAreaDimensions);
            _currentDestinationCoordinates = x + ", " + y;
        }

        // Draw city icon.
        if (GUI.Button(new Rect(relativeStartPosX + _mapWidthStart, relativeStartPosY + _mapHeightStart, 
            relativeWidth, relativeHeight), place.PlaceName, _standardGuiSkin.GetStyle(place.GuiStyle)))
        {
            _locationData1 = place.Description;
        }
知道为什么这可能不起作用吗。我不介意他们都被点击,但是上面的那个根本没有反应

总而言之,按钮“城市”绘制在按钮“世界地图”上。我希望按钮城市被按下时,点击它,但相反,按钮世界地图被按下,我看不到按钮城市激活。它没有反应,也不会开火

编辑:

似乎有一种奇怪的行为发生了下面的事情。OnGui()创建的第一个按钮是可单击的按钮。但最后创建的按钮是可见的按钮


将来遇到此问题的任何人都可能会发现此信息很有用。我的解决方案是将“世界地图”按钮分为两部分,一个显示信息和图像的框首先出现,另一个“世界地图”按钮没有图像,但具有所需的功能,最后出现,以便覆盖城市按钮出现的位置。

我不知道代码的具体内容。但是,尝试将城市图标按钮作为前景,地图作为背景,这应该在“层”下,并允许您按照需要设置逻辑

如果按钮都在同一个OnGUI()函数中,则它们将按照它们在代码中的显示顺序绘制。最后一张画在所有其他画的上面。这使得很难处理重叠,因为您希望截取顶部按钮,而不是底部按钮。乔·斯特劳特和其他一些人发布了一个解决方案

如果按钮位于不同的OnGUI()函数中(即不同的 脚本),用于指定其呈现顺序

您还可以在GUI.Window中包装控件,这样可以防止点击 降低控制

这个答案是抄袭的

最后,为什么gui上的按钮放在另一个按钮上时不可点击

Unity首先检查并绘制第一个按钮,以便在其上打印“a” 点击它。然后,第二个按钮被选中并绘制在 首先,但第一个按钮已使用“单击”事件。所以 同一OnGUI函数内的重叠对象永远不会发生 没错

原因来自


我希望这能有所帮助。

您知道如何从代码中执行此操作吗?我所有的ui都是通过脚本实现的。如果需要,我可以发布更多代码。我正在使用OnGui()停止使用
OnGui
并使用@Draco18s,我更喜欢尽可能地将我的ui与Unity前端(ui/Inspector、对象等)分开。我已经使用了新的UI,但是出于这个和其他原因,我更喜欢基于脚本的旧UI而不是基于对象的新UI。例如,从各种数据源(如数据库和其他操作)自动生成菜单和其他显示,在我看来,从ongui中可以更简单、更直观。