Files
boybook 760c2dd9ad 2.6
2025-12-01 20:59:16 +08:00

797 lines
21 KiB
Markdown
Raw Permalink 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界面。 |
| bindWorldPosition | (int, (float, float, float)) | 第一个元素为绑定的维度,第二个为世界坐标, 若传入这个参数autoScale默认为1isHud强制为1其他传入参数无效。 |
| bindOffset | tuple | 意为UI与绑定实体的偏移量默认值为(0, 1, 0)。 |
| autoScale | int | 值为( 0 / 1 ) 意为绑定实体的UI是否会自动根据实体与本地玩家的距离动态缩放大小默认值为1即会动态缩放头顶UI的大小。 |
| mini_map_root_path | str | 小地图控件根路径 |
- 当isHud参数设置为0或不传时会在比当前UI的层级大1000的地方生成生成后再调用SetIsHud接口无法再修改层级如果新创建的UI导致了其他UI无法正常交互可以把新UI中main的type由screen改为panel并删除screen相关属性来解决遮挡问题。
- 设置自动缩放需要将UI写为百分比形式设置为固定尺寸将无法缩放超过一定距离会不可见。
- 注意:
绑定实体的UI缩放仅作用于根节点比如"main"节点)下的子节点。
建议在根节点下挂载一个panel类型的节点然后将所有需要缩放的UI节点设置为百分比属性并挂载在这个panel节点下。
如果开启了自动缩放父节点如上述panel的偏移需要设置为[0,0],缩放功能才能正常使用
- 注意:
若同屏中存在太多绑定实体的UI或一次性创建、删除大量绑定实体UI都可能会造成卡顿等性能问题。
建议使用资源池来管理绑定实体UI当实体与本地玩家距离超过一定范围时隐藏/移除其绑定UI或使其绑定UI改为绑定其他有需求的实体。
当需要大批量创建绑定实体UI时建议将创建UI的任务分为小批量多次执行每批次间相距至少一帧。例如需要创建100个绑定实体UI将任务分散在5帧中每帧创建20个绑定实体UI。
- 注意:
第二个参数uiKey如果传进去名字一样名字的ui则会创建失败请保证uiKey的唯一性。
- 示例
```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()
```
## EnableFontBatchRender
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.gameCompClient.GameComponentClient
- 描述
是否开启字体合批
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| enable | bool | True开启False关闭 |
- 返回值
- 备注
- 设置是否开启字体合批功能,开启之后对性能有优化效果,默认开启。
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateGame(levelId)
print(comp.EnableFontBatchRender(True))
```
## 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()
```
## GetTopUINode
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.extraClientApi
- 描述
获取Push进来的最顶层界面包括原生界面详见<a href="../../../../mcguide/18-界面与交互/30-UI说明文档.html#界面创建流程及生命周期" rel="noopenner"> 界面创建流程及生命周期 </a>
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| ScreenNode | UI节点 |
- 示例
```python
import mod.client.extraClientApi as clientApi
uiNode = clientApi.GetTopUINode()
```
## 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)
```
## GetUIScreenProxyCls
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.extraClientApi
- 描述
获得原生界面Screen代理基类
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| type(CustomUIControlProxy) | 原生界面Screen代理基类 |
- 示例
```python
import client.extraClientApi as clientApi
CustomUIScreenProxy = clientApi.GetUIScreenProxyCls()
```
## 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()
```
## OpenDeveloperHomeWindow
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.neteaseWindowCompClient.NeteaseWindowCompClient
- 描述
打开网易资源中心开发者主页。该接口只能在横屏版本手机端使用
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| mailAddress | str | 开发者邮箱 |
- 返回值
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateNeteaseWindow(playerId)
comp.OpenDeveloperHomeWindow("developer@163.com")
```
## OpenResourceCenterDetailWindow
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.neteaseWindowCompClient.NeteaseWindowCompClient
- 描述
打开网易资源中心组件详情界面。该接口只能在横屏版本手机端使用
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| itemId | str | 组件id |
- 返回值
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateNeteaseWindow(playerId)
comp.OpenResourceCenterDetailWindow("itemId")
```
## 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所列举的所有参数。
- 生成UI的json文件中is_showing_menu必须设置为True
- 示例
```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()
```
## RegisterUIAnimations
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.extraClientApi
- 描述
注册UI动画
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| data | dict | 动画的json数据详见备注 |
| override | bool | 是否覆盖原先注册的同命名空间同名的动画相当于对原先动画的修改默认值是True表示覆盖如果为False则会检测是否有覆盖有的话会打印错误信息 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否注册成功 |
- 备注
- UI属性动画相关详见<a href="../../../../mcguide/18-界面与交互/19-控件属性动画.html">属性动画</a>
- 需要注意的是动态注册的动画是不支持外部继承以及变量解析的除此之外这里是通过代码动态注入动画实际上和用json写动画是一致的。
- 示例
```python
# 准备动画的数据,其中必须要有 "namespace" 作为动画的命名空间
# 这里我们一次注册了两个动画片段,分别是 "alpha_animation_1" 以及 "alpha_animation_2"(一次可以注册多个回调,和写 ui json是一致的
data = {
"namespace": "alphaTest",
"alpha_animation_1": {
"anim_type": "alpha",
"duration": 1.5,
"from": 0,
"to": 1,
"next": "@namespace.alpha_animation_2"
},
"alpha_animation_2": {
"anim_type": "alpha",
"duration": 1.5,
"from": 1,
"to": 0,
"next": "@namespace.alpha_animation_1"
}
}
import mod.client.extraClientApi as clientApi
clientApi.RegisterUIAnimations(data, True)
```
## UnregisterUIAnimation
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.extraClientApi
- 描述
取消UI动画的注册
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| namespace | str | 动画的命名空间 |
| defName | str | 动画的名称 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否取消注册成功 |
- 备注
- UI属性动画相关详见<a href="../../../../mcguide/18-界面与交互/19-控件属性动画.html">属性动画</a>
- 示例
```python
# 取消 "alphaTest" 命名空间下的 "alpha_animation_1" 动画,后续无法通过 setAnimation 设置该动画到控件中
import mod.client.extraClientApi as clientApi
clientApi.UnregisterUIAnimation("alphaTest", "alpha_animation_1")
```