我有2个按钮。一个按钮很大,并且也是背景(它是地图)。另一个是出现在背景按钮上方的按钮。
我的想法是,当单击背景(世界地图)时,请做一件事。然后,当单击较小的按钮(例如代表一个城市)时,请执行其他操作。我的第二个按钮在第一个按钮之后被调用,并且正确显示,但是无法单击。
即使第二个按钮出现在第一个按钮的顶部,单击它也不会导致其被激活。而是仅单击背景。这是我的代码:
// 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;
}
任何想法为什么这可能行不通。我不介意它们是否都被单击,但是最上面的一个根本不响应。
总而言之,按钮“ city”绘制在按钮“ worldmap”上。我希望在单击按钮城市时将其按下,但是按钮世界地图却被按下,并且看不到按钮城市的激活。它反应迟钝,不会触发。
编辑:
似乎发生以下某种奇怪的行为。 OnGui()创建的第一个按钮是可单击的按钮。但是最后创建的按钮是可见的按钮。
以后遇到此问题的任何人都可能会发现此信息有用。我的解决方法是将世界地图按钮分为两部分,首先显示信息和图像的框,然后显示没有图像但具有所需功能的世界地图按钮,以便将城市按钮出现的位置覆盖。 / p>
答案 0 :(得分:1)
我不知道您代码的细节。但是,请尝试将城市图标按钮作为前景,将地图作为背景,这应该在“图层”下,并允许您根据需要设置逻辑。
答案 1 :(得分:1)
如果所有按钮都在同一个OnGUI()函数中,则会按照它们在代码中出现的顺序进行绘制。最后一个位于其他所有元素之上。这使得很难处理重叠,因为您要截取顶部按钮而不是底部按钮。 Joe Strout和其他一些人发布了一个解决方案here。
如果您的按钮位于不同的OnGUI()函数中(即, 脚本),请使用GUI.depth指定其渲染顺序。
您还可以将控件包装在GUI.Window中,以防止单击 降低控件。
此答案副本来自here。
最后,为什么将gui按钮放在另一个按钮上时无法单击?
Unity首先检查并绘制第一个按钮,以便在其上打印“ a” 点击它。然后选中第二个按钮并绘制在 首先,但第一个按钮已经使用了“点击”事件。所以 同一OnGUI函数中的重叠对象永远不会发生 正确。
来自here的原因。
我希望这会有所帮助。