Unity TEngine5开源框架 Demo UI

UIWindow和UIWidget的预制体为啥都要加Canvas和GraphicRaycaster

UGUI Canvas上元素变更操作会导致整个Canvas网格重建,非常耗时。而且分Canvas 比较好调整order in layer 来处理层级关系。正常都是一个面板一个canva。如果所有panel 都是一个canvas ,那你一个元素变化会导致整个canvas网格重建,性能也不好。

GraphicRaycaster,让该画布的按钮等可以点击。

一、游戏菜单(UIWindow)

先做一个简单的菜单,命名根据规则

复制粘贴

 二、商店(UIWidget)

1、UIWindow和UIWidget关系

整个窗口的是个UIWindow,里面所有部件都是UIWidget。比如背包系统,整个界面可能是个BagWindow,左上角为血条Widget,顶部为切换页签的Widget。

灵活定义

UIWidget : 格子
UIWidget : 背包面板Grid
UIWindow :  仓库
UIWindow :  背包
UIWIndow :装备栏

2、实践

商店界面

找了三个类型的商店界面,取一套公共的作为UI_Shop(UIWindow),和其他三个不同的作为子界面(UIWidget)

一般生成后,在点一下这个将脚本覆盖就好。等有时间可以拓展一下这里,会更好用。

商店的三个子界面

 

using UnityEngine;
using UnityEngine.UI;
using TEngine;

namespace GameLogic
{
	partial class Shop_LIfe:UIWidget
	{
		#region 脚本工具生成的代码
		private Button m_btnGem1;
		private Button m_btnGem2;
		private Button m_btnAsk;
		protected override void ScriptGenerator()
		{
			m_btnGem1 = FindChildComponent<Button>("List/m_btnGem1");
			m_btnGem2 = FindChildComponent<Button>("List/m_btnGem2");
			m_btnAsk = FindChildComponent<Button>("List/m_btnAsk");
			m_btnGem1.onClick.AddListener(OnClickGem1Btn);
			m_btnGem2.onClick.AddListener(OnClickGem2Btn);
			m_btnAsk.onClick.AddListener(OnClickAskBtn);
		}

		private void OnClickAskBtn()
		{
			Log.Debug("1");
		}

		private void OnClickGem2Btn()
		{
			Log.Debug("2");
		}

		private void OnClickGem1Btn()
		{
			Log.Debug("3");
		}

		#endregion
	}
}

这次采用这个生成方式,还有好几种就不一个一个讲了,看看源码就行

using TMPro;
using UnityEngine;
using UnityEngine.UI;
using TEngine;

namespace GameLogic
{
    [Window(UILayer.UI)]
    class UI_Shop : UIWindow
    {
        private  Shop_LIfe m_Shop_Life;
        private  Shop_Gem m_Shop_Gem;
        private  Shop_Gold m_Shop_Gold;
        #region 脚本工具生成的代码
        private Button m_btnTab_Life;
        private Button m_btnTab_Gem;
        private Button m_btnTab_Gold;
        private Button m_btnClose_Blue;
        protected override void ScriptGenerator()
        {
            m_btnTab_Life = FindChildComponent<Button>("Dimed/Popup/m_btnTab_Life");
            m_btnTab_Gem = FindChildComponent<Button>("Dimed/Popup/m_btnTab_Gem");
            m_btnTab_Gold = FindChildComponent<Button>("Dimed/Popup/m_btnTab_Gold");
            m_btnClose_Blue = FindChildComponent<Button>("Dimed/Popup/m_btnClose_Blue");
            m_btnTab_Life.onClick.AddListener(OnClickTab_LifeBtn);
            m_btnTab_Gem.onClick.AddListener(OnClickTab_GemBtn);
            m_btnTab_Gold.onClick.AddListener(OnClickTab_GoldBtn);
            m_btnClose_Blue.onClick.AddListener(OnClickClose_BlueBtn);
        }
        #endregion

        protected override async void OnCreate()
        {
            base.OnCreate();
            m_Shop_Life=await CreateWidgetByPathAsync<Shop_LIfe>(this.transform,"Shop_LIfe",false);
            m_Shop_Gem=await CreateWidgetByPathAsync<Shop_Gem>(this.transform,"Shop_Gem",false);
            m_Shop_Gold= await CreateWidgetByPathAsync<Shop_Gold>(this.transform,"Shop_Gold",true);
        }

        #region 事件
        private void OnClickTab_LifeBtn()
        {
            m_Shop_Life.Visible = true;
            m_Shop_Gem.Visible = false;
            m_Shop_Gold.Visible = false;
        }
        private void OnClickTab_GemBtn()
        {
            m_Shop_Life.Visible = false;
            m_Shop_Gem.Visible = true;
            m_Shop_Gold.Visible = false;
        }
        private void OnClickTab_GoldBtn()
        {
            m_Shop_Life.Visible = false;
            m_Shop_Gem.Visible = false;
            m_Shop_Gold.Visible = true;
        }
        private void OnClickClose_BlueBtn()
        {
            
        }
        #endregion

    }
}

 

### 如何找到 Unity 开源 Demo 项目 要查找 Unity开源 Demo 项目,可以遵循以下方法: #### 方法一:通过 GitHub 平台搜索 GitHub 是全球最大的代码托管平台之一,许多开发者会将自己的 Unity 开源项目发布到此平台上。可以通过关键词搜索来定位这些项目。例如,在 GitHub 搜索栏输入 `Unity demo` 或者更具体的关键词如 `Unity MMO demo` 可以发现大量相关项目[^1]。 对于特定需求的项目,比如多人在线游戏框架,可以直接参考已有的成熟项目,例如 **UnityMMO**。这是一个基于 Unity 引擎开发的高性能 MMO 游戏框架,支持大规模玩家并发操作。它利用了 Unity 提供的强大网络功能以及资源管理能力,帮助开发者快速搭建和测试 MMO 类型的游戏逻辑。 以下是克隆并运行 UnityMMO 项目的具体方式: ```bash git clone https://github.com/liuhaopen/UnityMMO.git ``` 完成克隆后按照教程中的环境配置说明设置好本地开发环境即可加载项目文件至 Unity 编辑器中进行体验。 #### 方法二:查阅 Unity 官方文档与 Asset Store 资料库 除了第三方贡献者的仓库外,Unity 自身也维护了一系列高质量的学习资料和技术文章用于指导用户更好地掌握引擎特性及其应用领域[^2]。其中就包含了部分免费提供的示例工程链接地址或者插件下载页面地址等重要信息。 另外值得一提的是 Unity Asset Store 上也有不少由社区成员分享出来的优秀作品可供借鉴学习。像提到过的 TEngine 就是一个不错的例子,其内部实现了一套灵活可定制化的 UI 架构设计模式——将通用组件抽象成基础类 (Base Class),而特殊表现形式则封装于派生子类之中形成层次分明的关系结构[^3]。 --- ###
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值