diff --git a/GFramework.Game.Abstractions/ui/IUiPageBehavior.cs b/GFramework.Game.Abstractions/ui/IUiPageBehavior.cs
index c5ab865..a91e9df 100644
--- a/GFramework.Game.Abstractions/ui/IUiPageBehavior.cs
+++ b/GFramework.Game.Abstractions/ui/IUiPageBehavior.cs
@@ -23,6 +23,11 @@ public interface IUiPageBehavior
///
bool IsAlive { get; }
+ ///
+ /// 获取页面是否可见
+ ///
+ bool IsVisible { get; }
+
///
/// 获取页面是否为模态页面
///
@@ -33,11 +38,6 @@ public interface IUiPageBehavior
///
bool BlocksInput { get; }
- ///
- /// 获取页面是否需要蒙版
- ///
- bool RequiresMask { get; }
-
///
/// 页面进入时调用的方法
///
diff --git a/GFramework.Game.Abstractions/ui/IUiRouter.cs b/GFramework.Game.Abstractions/ui/IUiRouter.cs
index db92195..1ca311c 100644
--- a/GFramework.Game.Abstractions/ui/IUiRouter.cs
+++ b/GFramework.Game.Abstractions/ui/IUiRouter.cs
@@ -171,17 +171,25 @@ public interface IUiRouter : ISystem
///
/// 清空指定层级的所有UI
///
+ /// 要清空的UI层级。
+ /// 是否销毁UI实例。如果为true,则会销毁UI实例;否则仅从层级中移除。
void ClearLayer(UiLayer layer, bool destroy = false);
///
/// 从指定层级获取UI实例
///
+ /// UI的唯一标识符。
+ /// 要查询的UI层级。
+ /// 返回与指定键关联的UI行为接口实例;如果未找到则返回null。
IUiPageBehavior? GetFromLayer(string uiKey, UiLayer layer);
///
/// 判断指定层级是否存在可见UI
///
- bool HasVisibleInLayer(UiLayer layer);
+ /// 要检查的UI的唯一标识符
+ /// 要检查的UI层级
+ /// 如果在指定层级中存在可见的UI,则返回true;否则返回false
+ bool HasVisibleInLayer(string uiKey, UiLayer layer);
#endregion
}
\ No newline at end of file
diff --git a/GFramework.Game/ui/UiRouterBase.cs b/GFramework.Game/ui/UiRouterBase.cs
index d5fddb8..0449368 100644
--- a/GFramework.Game/ui/UiRouterBase.cs
+++ b/GFramework.Game/ui/UiRouterBase.cs
@@ -607,9 +607,13 @@ public abstract class UiRouterBase : AbstractSystem, IUiRouter
///
/// 判断指定层级是否有UI显示
///
- public bool HasVisibleInLayer(UiLayer layer)
+ public bool HasVisibleInLayer(string uiKey, UiLayer layer)
{
- return _layers.TryGetValue(layer, out var layerDict) && layerDict.Count > 0;
+ if (!_layers.TryGetValue(layer, out var layerDict) ||
+ !layerDict.TryGetValue(uiKey, out var page))
+ return false;
+
+ return page.IsVisible;
}
#endregion
diff --git a/GFramework.Godot/ui/CanvasItemUiPageBehavior.cs b/GFramework.Godot/ui/CanvasItemUiPageBehavior.cs
index 1b9a1ea..ff0f6ab 100644
--- a/GFramework.Godot/ui/CanvasItemUiPageBehavior.cs
+++ b/GFramework.Godot/ui/CanvasItemUiPageBehavior.cs
@@ -1,4 +1,4 @@
-using GFramework.Game.Abstractions.ui;
+using GFramework.Game.Abstractions.ui;
using GFramework.Godot.extensions;
using Godot;
@@ -30,8 +30,15 @@ public class CanvasItemUiPageBehavior(T owner, string key) : IUiPageBehavior
///
/// 获取页面是否存活状态
///
+ /// 如果页面节点有效则返回true,否则返回false
public bool IsAlive => owner.IsValidNode();
+ ///
+ /// 获取页面是否可见状态
+ ///
+ /// 如果页面可见则返回true,否则返回false
+ public bool IsVisible => owner.Visible;
+
///
/// 页面进入时调用
///
@@ -110,9 +117,4 @@ public class CanvasItemUiPageBehavior(T owner, string key) : IUiPageBehavior
/// 获取或设置页面是否阻止输入
///
public bool BlocksInput { get; set; } = true;
-
- ///
- /// 获取或设置页面是否需要遮罩层
- ///
- public bool RequiresMask { get; set; }
}
\ No newline at end of file