Files
netease-modsdk-wiki/docs/mcdocs/1-ModAPI/接口/自定义UI/通用.md
2025-03-17 13:24:39 +08:00

547 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
sidebarDepth: 1
---
# 通用
## CheckCanBindUI
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.extraClientApi
- 描述
检查实体是否可以绑定头顶UI如何将UI与实体绑定详见[CreateUI](#CreateUI)接口
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| entityId | str | 实体id |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否可以绑定头顶UI True:可以绑定 False:不能绑定 |
- 备注
- 不能绑定头顶UI通常是由于该实体已经死亡或该实体刚创建出来。刚创建的实体若无法绑定头顶UI等待1-3帧后再次尝试绑定即可
- 示例
```python
import mod.client.extraClientApi as clientApi
canBind = clientApi.CheckCanBindUI(entityId)
```
## CreateUI
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.extraClientApi
- 描述
创建UI详见<a href="../../../../mcguide/18-界面与交互/30-UI说明文档.html#界面创建流程及生命周期">界面创建流程及生命周期</a>
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| nameSpace | str | 命名空间建议为mod名字 |
| uiKey | str | UI唯一标识 |
| createParams | dict | 创建UI的参数会传到UI类的_init_函数中 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| ScreenNode | UI节点 |
- 备注
- createParams参数解释如下
| 参数 | 类型 | 解释 |
| ----------------- | ----- | ------------------------------------------------------------ |
| isHud | int | 值为( 0 / 1) 意为是否为HUD界面的UI。一般情况下射击按钮不屏蔽游戏, 原生的操作的界面应该isHud为1商城界面等不是游戏内操作的界面isHud应该为0默认值为0。当isHud取0时创建的UI会默认从比当前UI的层级大1000的地方生成可能会造成控件遮挡情况当isHud为1时创建的UI会从层级为0的地方生成 |
| inputMode | int | 值为( 0 / 1 ) 属于旧版本写法和isHud含义相同但取值相反即isHud取0 等于 inputMode取1两者同时存在优先判断isHud。 |
| bindEntityId | str | 意为绑定实体的id。若不传入该键值对或值为None则会以isHud = 0来处理该UI界面。 |
| bindOffset | tuple | 意为UI与绑定实体的偏移量默认值为(0, 1, 0)。 |
| autoScale | int | 值为( 0 / 1 ) 意为绑定实体的UI是否会自动根据实体与本地玩家的距离动态缩放大小默认值为1即会动态缩放头顶UI的大小。 |
| mini_map_root_path | str | 小地图控件根路径 |
- 注意:
绑定实体的UI缩放仅作用于根节点比如"main"节点)下的子节点。
建议在根节点下挂载一个panel类型的节点然后将所有需要缩放的UI节点设置为百分比属性并挂载在这个panel节点下。
- 注意:
若同屏中存在太多绑定实体的UI或一次性创建、删除大量绑定实体UI都可能会造成卡顿等性能问题。
建议使用资源池来管理绑定实体UI当实体与本地玩家距离超过一定范围时隐藏/移除其绑定UI或使其绑定UI改为绑定其他有需求的实体。
当需要大批量创建绑定实体UI时建议将创建UI的任务分为小批量多次执行每批次间相距至少一帧。例如需要创建100个绑定实体UI将任务分散在5帧中每帧创建20个绑定实体UI。
- 示例
```python
import mod.client.extraClientApi as clientApi
from mod_log import logger as logger
# 监听引擎初始化完成事件在这个事件后创建我们的战斗UI
def OnUIInitFinished(self, args):
logger.info("OnUIInitFinished : %s" % args)
# 注册UI 详细解释参照《UI API》
clientApi.RegisterUI(modConfig.ModName, modConfig.FpsBattleUIName, modConfig.FpsBattleUIPyClsPath, modConfig.FpsBattleUIScreenDef)
# 创建普通UI界面
clientApi.CreateUI(modConfig.ModName, modConfig.FpsBattleUIName, {"isHud" : 1})
# 获取创建的UI界面
self.mFpsBattleUINode = clientApi.GetUI(modConfig.ModName, modConfig.FpsBattleUIName)
if self.mFpsBattleUINode:
self.mFpsBattleUINode.Init()
# 不同于上面的例子这里展示的是如何创建绑定实体的UI界面
def OnUIInitFinished(self, args):
logger.info("OnUIInitFinished : %s" % args)
# 同样先注册UI
clientApi.RegisterUI(modConfig.ModName, modConfig.FpsBattleUIName, modConfig.FpsBattleUIPyClsPath, modConfig.FpsBattleUIScreenDef)
# 创建绑定id为entityId的实体的UI
clientApi.CreateUI(
modConfig.ModName,
modConfig.FpsBattleUIName,
{
"bindEntityId": entityId,
"bindOffset": (0, 2, 0),
"autoScale": 1
}
)
self.mFpsBattleUINode = clientApi.GetUI(modConfig.ModName, modConfig.FpsBattleUIName)
if self.mFpsBattleUINode:
self.mFpsBattleUINode.Init()
```
## GetCustomUIControlProxyCls
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.extraClientApi
- 描述
获得原生界面自定义UI代理基类
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| type(CustomUIControlProxy) | 原生界面自定义UI代理基类 |
- 示例
```python
import client.extraClientApi as clientApi
CustomUIControlProxy = clientApi.GetCustomUIControlProxyCls()
```
## GetMiniMapScreenNodeCls
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.extraClientApi
- 描述
获取小地图ScreenNode基类
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| type(MiniMapBaseScreen) | 小地图ScreenNode基类 |
- 示例
```python
import mod.client.extraClientApi as clientApi
MiniMapBaseScreen = clientApi.GetMiniMapScreenNodeCls()
```
## GetNativeScreenManagerCls
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.extraClientApi
- 描述
获得NativeScreenManager类
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| type(NativeScreenManager) | NativeScreenManager类 |
- 示例
```python
import client.extraClientApi as clientApi
NativeScreenManager = clientApi.GetNativeScreenManagerCls()
```
## GetScreenNodeCls
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.extraClientApi
- 描述
获得ScreenNode类
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| type(ScreenNode) | ScreenNode类 |
- 示例
```python
import client.extraClientApi as clientApi
ScreenNode = clientApi.GetScreenNodeCls()
```
## GetTopScreen
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.extraClientApi
- 描述
获取UI堆栈栈顶的UI节点
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| ScreenNode | UI节点堆栈为空时返回None |
- 备注
- 该接口获取最后一次PushScreen创建的界面区别于GetTopUI接口GetTopScreen仅可获取PushScreen创建的UIGetTopUI可获取创建的原生UI或PushScreen创建的UI
- 示例
```python
import mod.client.extraClientApi as clientApi
node = clientApi.GetTopScreen()
```
## GetTopUI
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.extraClientApi
- 描述
获取UI栈顶的UI名称
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| str | 最顶层的UI名称如果弹出为原生UI则名称为([原生UI枚举](../../枚举值/UICategory.md)) |
- 备注
- 获取UI堆栈栈顶的UI名称区别于GetTopScreen接口GetTopUI可获取原生UI及PushScreen生成的UIGetTopScreen仅可获取PushScreen创建的UI。
- 获取到PushScreen生成UI返回为main如果在ui的json文件中修改main名称这里获得的返回值也会与之对应。
- 示例
```python
import mod.client.extraClientApi as clientApi
TopUIName = clientApi.GetTopUI()
```
## GetUI
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.extraClientApi
- 描述
获取UI节点详见<a href="../../../../mcguide/18-界面与交互/30-UI说明文档.html#界面创建流程及生命周期">界面创建流程及生命周期</a>
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| nameSpace | str | 命名空间建议为mod名字 |
| uiKey | str | UI唯一标识 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| ScreenNode | UI节点 |
- 示例
```python
import mod.client.extraClientApi as clientApi
uiNode = clientApi.GetUI(modConfig.ModName, modConfig.FpsBattleUIName)
```
## GetViewBinderCls
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.extraClientApi
- 描述
获得ViewBinder类
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| type(ViewBinder) | ViewBinder类 |
- 示例
```python
import client.extraClientApi as clientApi
ViewBinder = clientApi.GetViewBinderCls()
```
## GetViewViewRequestCls
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.extraClientApi
- 描述
获得ViewRequest类
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| type(ViewRequest) | ViewRequest类 |
- 示例
```python
import client.extraClientApi as clientApi
ViewRequest = clientApi.GetViewViewRequestCls()
```
## PopScreen
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.extraClientApi
- 描述
使用堆栈管理的方式关闭UI
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否关闭成功 |
- 备注
- 该接口关闭由PushScreen创建的界面区别于PopTopUI接口PopScreen仅可弹出PushScreen创建的UIPopTopUI可弹出游戏原生UI及PushScreen创建的UI
- 示例
```python
import mod.client.extraClientApi as clientApi
clientApi.PopScreen()
```
## PopTopUI
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.extraClientApi
- 描述
弹出UI栈顶的UI
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否成功 |
- 备注
- 弹出UI堆栈栈顶的UI区别于PopScreen接口PopTopUI可弹出原生UI及PushScreen生成的UIPopScreen仅可弹出PushScreen创建的UI。
- 不允许在同一帧里面进行多次操作只允许一帧弹出一个UI
- 示例
```python
import mod.client.extraClientApi as clientApi
MyBool = clientApi.PopTopUI()
```
## PushScreen
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.extraClientApi
- 描述
使用堆栈管理的方式创建UI
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| namespace | str | 命名空间建议为mod名字 |
| uiname | str | UI唯一标识 |
| createParams | dict | 创建UI的自定义参数会传到UI类的_init_函数中默认为None |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| ScreenNode | UI节点创建失败时返回None |
- 备注
- 使用PopScreen可以关闭该接口创建的界面
- createParams为自定义参数该参数和CreateUI方法中的createParams不同不支持CreateUI所列举的所有参数。
- 示例
```python
import mod.client.extraClientApi as clientApi
# 监听引擎初始化完成事件在这个事件后创建我们的战斗UI
# 由于UI不会在PushScreen被调用后立即创建完成请不要在Init函数中对控件进行操作创建完成后会调用screenNode的Create函数
def OnUIInitFinished(self, args):
clientApi.RegisterUI(modConfig.ModName, modConfig.FpsBattleUIName, modConfig.FpsBattleUIPyClsPath, modConfig.FpsBattleUIScreenDef)
self.mFpsBattleUINode = clientApi.PushScreen(modConfig.ModName, modConfig.FpsBattleUIName)
if self.mFpsBattleUINode:
self.mFpsBattleUINode.Init()
```
## RegisterUI
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.extraClientApi
- 描述
注册UI创建UI前需要先注册UI。同一UI只需要注册一次即可。详见<a href="../../../../mcguide/18-界面与交互/30-UI说明文档.html#界面创建流程及生命周期">界面创建流程及生命周期</a>
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| nameSpace | str | 命名空间建议为mod名字 |
| uiKey | str | UI唯一标识 |
| clsPath | str | UI类路径 |
| uiScreenDef | str | UI画布路径格式为"namespace.screenName"。namespace对应uiJson文件中"namespace"对应的值UI编辑器生成的uiJson文件该值等于文件名。screenName对应想打开的画布的名称。 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否注册成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
from mod_log import logger as logger
# 监听引擎初始化完成事件在这个事件后创建我们的战斗UI
def OnUIInitFinished(self, args):
logger.info("OnUIInitFinished : %s" % args)
# 注册UI 详细解释参照《UI API》
clientApi.RegisterUI(modConfig.ModName, modConfig.FpsBattleUIName, modConfig.FpsBattleUIPyClsPath, modConfig.FpsBattleUIScreenDef)
# 创建UI 详细解释参照《UI API》
clientApi.CreateUI(modConfig.ModName, modConfig.FpsBattleUIName, {"isHud" : 1})
self.mFpsBattleUINode = clientApi.GetUI(modConfig.ModName, modConfig.FpsBattleUIName)
if self.mFpsBattleUINode:
self.mFpsBattleUINode.Init()
```