Files
netease-modsdk-wiki/docs/mcguide/18-界面与交互/60-原生界面添加自定义UI使用文档.md
2025-03-17 13:24:39 +08:00

7.2 KiB
Raw Blame History

front, hard, time
front hard time
入门 分钟

原生界面添加自定义UI

设计初衷

开发者在开发游戏玩法时不可避免地想在游戏的原生界面上做一些自己的修改而原生界面的逻辑开发者无法改动。为了达到改动原生界面的视觉效果似乎只有做一个界面盖在原生界面上模拟修改或实现一个自己的界面并复刻原生界面的功能这两种方式而这两种方式或效果不是很完美或实现难度较高针对上述希望在原生界面上做些简单的不影响原生界面逻辑的自定义UI附加我们提供如下接口进行支持方便开发者在若干常用的原生UI上进行自定义的修改。

框架介绍

该框架涉及到两个类NativeScreenManager和CustomUIControlProxy这两个类均可通过extraClientApi中对应API获取。NativeScreenManager提供开发者想要修改的原生界面的注册与反注册接口通过注册接口注册后每当对应原生UI生成时会附加上开发者指定的自定义UI调用反注册接口取消注册。CustomUIControlProxy是自定义UI代理类它持有生成在原生UI中自定义UI的BaseUIControl实例以及其生命周期函数开发者可继承该类进行自定义逻辑编写。

可选的原生UI路径

为了避免开发者对原生界面进行过度的修改我们精选了若干适合添加自定义UI的原生界面并以枚举的方式提供给开发者选择枚举类型获得方式如下

import client.extraClientApi as clientApi
NativeScreenDataType = clientApi.GetMinecraftEnum().NativeScreenDataType

NativeScreenDataType.INVENTORY_CONTENT_PANEL

背包界面

背包界面

NativeScreenDataType.POCKET_INVENTORY_CONTENT_PANEL

口袋版背包界面

口袋版背包界面

NativeScreenDataType.CRAFTING_CONTENT_PANEL

合成台界面

合成台界面

NativeScreenDataType.POCKET_CRAFTING_CONTENT_PANEL

口袋版合成台界面

口袋版合成台界面

NativeScreenDataType.SMALL_CHEST_PANEL

小箱子界面

小箱子界面

NativeScreenDataType.POCKET_SMALL_CHEST_PANEL

口袋版小箱子界面

口袋版小箱子界面

NativeScreenDataType.LARGE_CHEST_PANEL

大箱子界面

大箱子界面

NativeScreenDataType.POCKET_LARGE_CHEST_PANEL

口袋版大箱子界面

口袋版大箱子界面

NativeScreenDataType.ENDER_CHEST_PANEL

末影箱界面

末影箱界面

NativeScreenDataType.POCKET_ENDER_CHEST_PANEL

口袋版末影箱界面

口袋版末影箱界面

NativeScreenDataType.FURNACE_PANEL

熔炉界面

熔炉界面

NativeScreenDataType.POCKET_FURNACE_PANEL

口袋版熔炉界面

口袋版熔炉界面

NativeScreenManager

NativeScreenManager类是单例类可通过extraClientApi.GetNativeScreenManagerCls()获得。该类用于管理原生界面创建时python层需要进行的操作目前包括RegisterCustomControl和UnRegisterCustomControl关于自定义UI接口将来会陆续添加更多新功能敬请期待。

  • 示例
import client.extraClientApi as clientApi
NativeScreenManager = clientApi.GetNativeScreenManagerCls()

manager = NativeScreenManager.instance()

注册与反注册接口

RegisterCustomControl

  • 描述

    注册对应原生界面被创建时希望附加到原生界面上的自定义UI及其控制委托类注册成功后每次原生界面被创建时被注册的自定义UI都会被创建到原生界面上关闭后销毁。

  • 参数

    参数名 数据类型 说明
    NativeScreenDataType NativeScreenDataType 可选的原生UI路径见上文
    customControlName str 自定义控件名称,一般由命名空间+"."+控件名组成,如"UIDemo.text0"
    proxyClassName str 继承自CustomUIControlProxy的自定义代理类模块路径
  • 返回值

    数据类型 说明
    bool 是否注册成功 True:成功 False:失败
  • 示例

import client.extraClientApi as clientApi
ClientSystem = clientApi.GetClientSystemCls()
NativeScreenManager = clientApi.GetNativeScreenManagerCls()
NativeScreenDataType = clientApi.GetMinecraftEnum().NativeScreenDataType

class UIDemoClientSystem(ClientSystem):
    def __init__(self, namespace, systemName):
        ClientSystem.__init__(self, namespace, systemName)
        NativeScreenManager.instance().RegisterCustomControl(
            NativeScreenDataType.INVENTORY_CONTENT_PANEL, "UIDemo.image0", "uidemoScripts.modClient.ui.UIDemoProxy.UIDemoProxy"
        )

UnRegisterCustomControl

  • 描述

    取消注册取消后生成原生界面时将不再生成对应的自定义UI。

  • 参数

    参数名 数据类型 说明
    NativeScreenDataType NativeScreenDataType 可选的原生UI路径见上文
    customControlName str 自定义控件名称,一般由命名空间+"."+控件名组成,如"UIDemo.text0"
  • 返回值

CustomUIControlProxy

CustomUIControlProxy是自定义UI代理类可通过extraClientApi.GetCustomUIControlProxyCls()获得。它持有生成在原生UI中自定义UI的BaseUIControl实例以及其生命周期函数但在其生命周期函数中不进行任何操作开发者可继承该类进行自定义逻辑编写并将自定义类的模块路径传入注册接口进行注册当原生界面创建完成后开发者在自定义类中重写的生命周期函数就会被调用。

  • 示例
import client.extraClientApi as clientApi
CustomUIControlProxy = clientApi.GetCustomUIControlProxyCls()


class UIDemoProxy(CustomUIControlProxy):
	def __init__(self, customData, customUIControl):
		CustomUIControlProxy.__init__(self, customData, customUIControl)

	def OnCreate(self):
		bgUIControl = self.GetCustomUIControl()
        labelUIControl = bgUIControl.GetChildByName("label0").asLabel()
        if labelUIControl:
            labelUIControl.SetText("10")

	def OnDestroy(self):
		print("---myProxyDestory---")

    def OnTick(self):
		print("---myProxyTick---")

GetCustomUIControl

  • 描述

    获得创建在原生界面中的自定义UI的BaseUIControl实例

  • 参数

  • 返回值

    数据类型 说明
    BaseUIControl 自定义UI的BaseUIControl实例

OnCreate

  • 描述

    自定义UI在原生界面中成功创建后调用的生命周期函数

  • 参数

  • 返回值

OnDestroy

  • 描述

    当原生界面关闭时自定义UI会被销毁销毁后调用的生命周期函数

  • 参数

  • 返回值

OnTick

  • 描述

    每帧调用的生命周期函数

  • 参数

  • 返回值