- 博客(72)
- 资源 (2)
- 收藏
- 关注
原创 UGUI优化
1.UI动静分离动”指的是元素移动,或者放大/缩小频率比较高的UI。“静”则是静止不动的UI,准确来说,是界面上不会移动、旋转、缩放、更换贴图和颜色的UI。UGUI系统是以Canvas为节点拆分动与静,把会动的UI元素放入专门为它们准备的合并用的画板上,再将静止不动的UI元素留在原来的画板上。这样一来,当会动的UI元素来回移动、旋转、缩放、改变贴图和颜色的时候,就不会再去重构那些静止部分的UI元素了。 动静分离后,CPU在重绘和合并时的消耗就大大降低了。2.拆分过重的UI有时一个Prefab
2022-02-18 14:07:16
1597
原创 UGUI的DrawCall和Rebuild
1.DrawCall的概念DrawCall是CPU调用图像编程接口,命令GPU进行渲染的操作。造成DrawCall过高的性能瓶颈其实是CPU而不是GPU。UGUI的合并原理是将相同的材质进行合并操作。因此UGUI减少DrawCall的方式是尽可能地进行动态合批。2.DrawCall的计算原理2.1.计算Depth(1)跳过不渲染的节点,如果处于渲染状态切没有任何其他相交的渲染元素,depth=0。(2)如果处于渲染状态切有其他元素相交则找到相交元素中最大的depth,判断能不能合批,
2022-02-18 11:39:01
2643
原创 解析ET6框架的数值组件
1.介绍在数值属性多,技能buff复杂且灵活性高的游戏,必须要有一套灵活的数值结构来搭配。 数值结构设计好了,实现技能系统就会非常简单,否则就是一场灾难。2.核心代码解析1.NumericType.cs增加人物属性字段 public enum NumericType { Max = 10000, Speed = 1000, SpeedBase = Speed * 10 + 1, SpeedAdd = Speed * 10 + 2, S
2022-01-26 14:00:20
1448
原创 解析ET6框架的ObjectWait组件
1.介绍ObjectWait组件用于等待,锁住方法继续执行直到收到返回通知。2.原理解析(ObjectWait.cs)1.ResultCallback返回IWaitType类型的ETTask public class ResultCallback<K>: IDestroyRun where K : struct, IWaitType { private ETTask<K> tcs;
2022-01-25 19:05:34
879
原创 基于ET6框架的多语言
1.介绍因为ET6的mono层没有像ET5实现一套excel的读取解析,所以我重新封装了一套多语言废除了编辑器部分,只有运行时有效。ET5的实现:Unity多语言(基于ET框架)_萧寒大大-优快云博客https://blog.youkuaiyun.com/m0_46712616/article/details/121514161?spm=1001.2014.3001.5501ET6的实现:陈芬辉/ET - Gitee.comhttps://gitee.com/chen_fen_hui/ET/tree/
2022-01-15 19:06:13
574
原创 基于ET6框架的资源热更
1.介绍在游戏上线后,难免会有大大小小的bug需要修复以及版本迭代,如果要别人重新安装整包会流失大量的玩家,所以游戏实现资源热更是必不可少的,它能让玩家在打开游戏的时候花费少量时间就可以实现版本迭代。因为ET6框架没有提供资源热更方案,所以我基于ET6框架封装了资源热更模块,实现了一下功能:1.部署后一键打ab标签2.生成版本文件3.版本文件比对更新4.断点续传(玩家下载到一半退出,下次进入可以从断点继续下载)5.loading进度加载显示6.本地和模拟手机两种模式切换陈
2022-01-13 19:52:06
4411
7
原创 基于ET6框架的声音组件
1.介绍一个游戏有音乐和音效是必不可少的,游戏中的各种音乐和音效都会对玩家的情绪和心里状态产生影响,各种氛围的营造和游戏的新鲜感和真实感的体现都需要音效的帮助。以下是我基于ET6框架封装了声音组件。陈芬辉/ET - Gitee.comhttps://gitee.com/chen_fen_hui/ET/tree/ETPro6.0/2.部分代码解析(SoundComponent.cs) /// <summary> /// 播放背景音乐
2022-01-03 16:43:08
3084
1
原创 基于ET6框架的特效组件
1.介绍一个好的游戏多多少少都有许多酷炫的特效,所以我基于ET6框架封装了一个特效组件用来实例化和销毁特效。陈芬辉/ET - Gitee.comhttps://gitee.com/chen_fen_hui/ET/tree/ETPro6.0/2.核心代码解析1.UIEffectDefine.cs定义每个特效的参数 public class UIEffectClass { public string name; //名字 pu...
2021-12-31 17:12:49
854
原创 基于ET6框架的循环列表
1.介绍在做一次性加载同一种预制体多个时(如排行榜,背包等),循环列表必不可少,它能帮你大大降低卡顿和提高性能。以下是我封装的基于EUI的循环列表,个人觉得封装的还不错。如果使用有遇到bug或者还有什么新需求可以留言或者提交pr。陈芬辉/ET - Gitee.comhttps://gitee.com/chen_fen_hui/ET/tree/ETPro6.0/2.核心代码解析(DynamicInfinityList.cs) protected void UpdateRender()
2021-12-30 10:28:54
1005
原创 ET6的UGUI框架的原理和使用(EUI之代码绑定)
1.介绍在开发UI的过程中,如果手动的去代码绑定组件既繁杂又耗时间,EUI提供了自动的代码绑定UI预制体的组件,使得开发效率大幅提升。GitHub - zzjfengqing/ET-EUI: 基于ET框架的UI模块基于ET框架的UI模块. Contribute to zzjfengqing/ET-EUI development by creating an account on GitHub.https://github.com/zzjfengqing/ET-EUI2.原理(UICodeSpa.
2021-12-21 17:24:43
2115
原创 解析ET6框架协程锁的原理和使用
1.介绍协程锁是异步编程时访问同一个变量,访问公共的资源(全局变量),就需要加锁,才能保证数据访问的安全。2.原理(CoroutineLockComponent.cs)1.Awake生成各种类型的协程锁队列添加到list里面 public override void Awake(CoroutineLockComponent self) { CoroutineLockComponent.Instance = self;
2021-12-14 20:00:52
3150
原创 解析ET6框架定时器的原理和使用
1.介绍在游戏逻辑编写中定时器是必不可少的,接下来我就来解析ET6框架的定时器的原理和使用。2.原理(TimerComponent.cs)1.awake将所有TimerAttribute的类型的类存入timerActions数组 public void Awake() { this.timerActions = new ITimer[TimeTypeMax]; //获取所有TimerAttribute.
2021-12-11 11:07:16
2356
原创 解析ET6框架的proto生成及优化
1.介绍protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。2.解析proto生成原理1.Proto2CS.cs将proto文件生成cs文件供c#使用 public static void Proto2CS() { msgOpcode.Clear(); //生成cs脚本 Proto2CS("ET", "..
2021-12-08 15:19:34
1060
原创 解析ET6框架的配置表的原理和使用
1.介绍在游戏开发中,为了方便策划程序分工合作,使用.xlsx配置表在所难免,接下来我就解析下ET6框架的配置表的原理和使用。2.原理1.ExcelExporter.cs导出.xlsx为模板类,并生成json然后动态编译成protobuf使用 public static void Export() { try { //读取bin目录下的Template.txt
2021-12-07 17:22:31
4457
原创 解析ET6框架Entity的生命周期
1.介绍1.LoadSystem:热重载时调用2.AwakeSystem:entity在Addcomponent/AddChild时调用3.DeserializeSystem:entity反序列话后调用4.UpdateSystem:同unity的Update一样每帧调用5.LateUpdateSystem:同unity的LateUpdate一样每帧调用(比Update晚)6.DestroySystem:entity触发Dispose时调用2.实现原理(以Awake/Updat
2021-12-06 11:37:59
1117
原创 解析ET6框架热重载的实现
1.介绍热重载是在 Editor 打开的状态下创建或编辑脚本并立即应用脚本行为的过程。无需重新启动应用程序和 Editor 即可使更改生效。更改并保存脚本时,Unity 会热重载所有当前加载的脚本数据。2.实现原理1.OperaComponentUpdateSystem.cs点击R重新装载Logic_.dl,Logic_pdb if (Input.GetKeyDown(KeyCode.R)) { //重新
2021-12-05 19:12:41
4263
原创 解析ET6的事件的使用
1.事件原理1.Entry.cs将所有反射类型添加到EventSystem中//将dll中的反射类型添加到EventSystem中Game.EventSystem.Add(CodeLoader.Instance.GetTypes());2.EventSystem.cs解析并处理所有EventAttribute标签的类存入allEvents字典,并使用publish分发事件public void Add(Type[] addTypes) {
2021-12-05 15:40:20
3427
原创 ET6运行指南(vs版)
1.安装环境1.下载Unity2020.3.0Unity最新版本下载-Unity稳定版本 | Unity中国官网下载Unity最新版本(Unity Tech Stream)和Unity稳定 (LTS) 版本。Tech Stream版可以访问正在开发的最新功能,而LTS版提供两年支持,具有更高的稳定性。——Unity版本、Unity软件下载、Unity许可证、Unity版本兼容、Unityhub下载。https://unity.cn/releases/full/20202.下载vs2022(安装.ne
2021-12-05 11:46:51
3045
原创 ILRuntime使用(c#及ILRuntime反射)
1.c#反射1.介绍反射是.NET中的重要机制,通过反射可以得到*.exe或*.dll等程序集内部的接口、类、方法、字段、属性、特性等信息,还可以动态创建出类型实例并执行其中的方法。2.通过反射获取类型//1.通过typeof获取某个值的类型System.Type stuType=typeof(Student);//2.通过一个对象获取该对象所对应的类的类型Student stu=new Student();System.Type type=stu.GetType();.
2021-12-02 19:25:29
1570
原创 ILRuntime使用(注册跨域委托)
1.Action//比如system.Action<int>appdomain.DelegateManager.RegisterMethodDelegate<int>();2.Func//比如system.Func<int,bool>appdomain.DelegateManager.RegisterFunctionDelegate<int,bool>();3.自定义委托/*比如public delegate void Tes.
2021-12-02 14:19:33
942
原创 ILRuntime使用(mono调用热更类方法)
1.调用静态方法 //调用无参数静态方法,appdomain.Invoke("类名", "方法名", 对象引用, 参数列表); appdomain.Invoke("HotFix_Project.InstanceClass", "StaticFunTest", null, null); //调用带参数的静态方法 appdomain.Invoke("HotFix_Project.InstanceClass", "StaticFunTest2",
2021-12-01 20:29:56
1265
原创 解析ET6接入ILRuntime实现热更
1.介绍ILRuntime项目为基于C#的平台(例如Unity)提供了一个纯C#实现,快速、方便且可靠的IL运行时,使得能够在不支持JIT的硬件环境(如iOS)能够实现代码的热更新。介绍 — ILRuntime (ourpalm.github.io)https://ourpalm.github.io/ILRuntime/public/v1/guide/index.htmlET是一个开源的游戏客户端(基于unity3d)服务端双端框架,服务端是使用C# .net core开发的分布式游戏服务端,其特点
2021-11-30 10:36:18
2054
原创 Unity多语言(基于ET框架)
1.介绍1.代码枚举加语言(编辑器加语言)2.一张Excle表配置所有语言3.静态文本加载(编辑模式下可根据key看到value,Default Language为value的语言和游戏中的Language不同)4.动态文本加载2.核心代码示例1.LocalizationService.csusing System;using System.Collections.Generic;using System.ComponentModel;using ...
2021-11-24 14:17:32
3527
2
原创 Unity编辑器拓展(GraphView制作对话系统编辑器)
1.介绍1.无限的分支和合并的对话能力。2.对话框、图形保存/加载系统。3.小地图,便于导航。4.有节点创建的搜索窗口。5.黑板填写属性值。6.用于分组节点的注释块。7.由Unity的嵌入式GraphView API支持。8.在压缩包中提供完整demo和代码注释。2.基础知识1.GraphViewExperimental.GraphView.GraphView - Unity 脚本 APIhttps://docs.unity.cn/cn/current/Scrip...
2021-11-22 14:26:24
4173
原创 UGUI特效层级和裁剪问题
1.介绍特效在游戏中是不可缺少的,拥有好看的特效可以让游戏锦上添花。但在添加特效的时候,会出现各种各样的问题,比如特效层级显示问题,scrollview穿透等等。2.特效显示优先级1.sortingOrder2.render Queue(同个sortingOrder下render Queue才生效)3.特效需要了解的组件1.canvas:需要勾选overrideSorting,然后填写order in layer 改变sortingOrder的值2.Image:在没...
2021-11-17 20:10:50
2081
原创 Unity坐标转换
世界坐标将游戏内的游戏空间理解为"世界",世界坐标系对等于游戏空间坐标系,游戏中的transform.position或者transform.rotation的信息都是基于世界坐标系。视口坐标视图坐标是对游戏显示视图的一个归一化的描述,其中左下角为(0,0),右上角为(0,1),在需要对显示视图进行分屏处理时,可以通过设置Camera上的ViewPort Rect属性来进行屏幕分屏渲染。屏幕坐标屏幕坐标是对屏幕像素(分辨率)的位置的描述,其中左下角为(0,0),右上角为(Scre
2021-11-16 19:39:24
1844
1
TopDown Engine 2.2.1.unitypackage
2021-10-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人