自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 资源 (2)
  • 收藏
  • 关注

原创 Shader(矩阵)

一.矩阵历史二.矩阵的方式解线性方程组其中r1代表第一行,r2代表第二行。三.什么是矩阵一个 m x n 的矩阵是由m行n列元素排列成的矩形阵列四.矩阵的运算1.矩阵的加减法2.矩阵的数乘3. 矩阵与矩阵之间的乘法首先并不是所有矩阵都能相乘,矩阵相乘需要满足一定的合法性m * n 的矩阵只能与 n * p 的矩阵相乘相乘后的矩阵大小为 m * p4.特殊的矩阵正交矩阵5.开发中常...

2022-03-06 16:54:16 327

原创 Shader(向量)

数学基础 —— 向量一.什么是向量1.向量的定义·向量是有大小和方向的有向线段·向量没有位置,只有大小和方向·向量的箭头是向量的结束点,尾巴是向量的起始点·向量描述的位移能被认为是与轴平行的位移序列·向量表示:三维(ax,ay,az) 二维(ax,ay)2.向量与标量·向量:有大小和方向的有向线段·标量:只有大小,没有方向的量3.向量与点·向量和点数学形式上相等,但几何意义完全不同·点:有位置,没有实际大小或方向·向量:无位置,有实际大小和方向·联

2022-03-06 15:58:21 211

原创 UGUI优化

1.UI动静分离动”指的是元素移动,或者放大/缩小频率比较高的UI。“静”则是静止不动的UI,准确来说,是界面上不会移动、旋转、缩放、更换贴图和颜色的UI。UGUI系统是以Canvas为节点拆分动与静,把会动的UI元素放入专门为它们准备的合并用的画板上,再将静止不动的UI元素留在原来的画板上。这样一来,当会动的UI元素来回移动、旋转、缩放、改变贴图和颜色的时候,就不会再去重构那些静止部分的UI元素了。 动静分离后,CPU在重绘和合并时的消耗就大大降低了。2.拆分过重的UI有时一个Prefab

2022-02-18 14:07:16 772

原创 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 2065

原创 解析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 698

原创 解析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 417

原创 基于ET6框架的多语言

1.介绍因为ET6的mono层没有像ET5实现一套excel的读取解析,所以我重新封装了一套多语言废除了编辑器部分,只有运行时有效。ET5的实现:Unity多语言(基于ET框架)_萧寒大大-CSDN博客https://blog.csdn.net/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 350

原创 基于ET6框架的资源热更

1.介绍在游戏上线后,难免会有大大小小的bug需要修复以及版本迭代,如果要别人重新安装整包会流失大量的玩家,所以游戏实现资源热更是必不可少的,它能让玩家在打开游戏的时候花费少量时间就可以实现版本迭代。因为ET6框架没有提供资源热更方案,所以我基于ET6框架封装了资源热更模块,实现了一下功能:1.部署后一键打ab标签2.生成版本文件3.版本文件比对更新4.断点续传(玩家下载到一半退出,下次进入可以从断点继续下载)5.loading进度加载显示6.本地和模拟手机两种模式切换陈

2022-01-13 19:52:06 3395 5

原创 基于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 2862 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 577

原创 基于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 759

原创 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 1004

原创 解析ET6框架协程锁的原理和使用

1.介绍协程锁是异步编程时访问同一个变量,访问公共的资源(全局变量),就需要加锁,才能保证数据访问的安全。2.原理(CoroutineLockComponent.cs)1.Awake生成各种类型的协程锁队列添加到list里面 public override void Awake(CoroutineLockComponent self) { CoroutineLockComponent.Instance = self;

2021-12-14 20:00:52 2408

原创 解析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 1243

原创 解析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 606

原创 解析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 3253

原创 解析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 684

原创 解析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 3270

原创 解析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 2893

原创 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 2130

原创 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 1075

原创 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 700

原创 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 853

原创 解析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 1650

原创 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 2550 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 2842

原创 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 1073

原创 Unity坐标转换

世界坐标将游戏内的游戏空间理解为"世界",世界坐标系对等于游戏空间坐标系,游戏中的transform.position或者transform.rotation的信息都是基于世界坐标系。视口坐标视图坐标是对游戏显示视图的一个归一化的描述,其中左下角为(0,0),右上角为(0,1),在需要对显示视图进行分屏处理时,可以通过设置Camera上的ViewPort Rect属性来进行屏幕分屏渲染。屏幕坐标屏幕坐标是对屏幕像素(分辨率)的位置的描述,其中左下角为(0,0),右上角为(Scre

2021-11-16 19:39:24 1382

原创 Unity编辑器拓展(EditorUtility/EditorApplication)

EditorUtilityEditor 实用程序函数UnityEditor.EditorUtility - Unity 脚本 APIhttps://docs.unity.cn/cn/2020.3/ScriptReference/EditorUtility.htmlEditorApplication主应用程序类。UnityEditor.EditorApplication - Unity 脚本 APIhttps://docs.unity.cn/cn/2020.3/ScriptReferenc

2021-11-15 15:14:03 1199

原创 Unity编辑器拓展(TreeView)

TreeView用于显示可以展开和折叠的层级数据。IMGUI.Controls.TreeView - Unity 脚本 APIhttps://docs.unity.cn/cn/2020.3/ScriptReference/IMGUI.Controls.TreeView.html代码示例SimpleTreeView.csusing System.Collections.Generic;using UnityEditor.IMGUI.Controls;class SimpleTree

2021-11-15 15:13:41 1350

原创 Unity编辑器拓展(PopupWindow/AdvancedDropdown)

PopupWindow弹出窗口没有边距,不可拖动,也无法调节大小。此外,它们还会在失去焦点时自动关闭。它们用于显示短暂的信息或选项。UnityEditor.PopupWindow - Unity 脚本 APIhttps://docs.unity.cn/cn/2020.3/ScriptReference/PopupWindow.html...

2021-11-14 09:58:15 828

原创 Unity编辑器拓展(GenericMenu/Undo)

GenericMenu创建自定义上下文菜单和下拉菜单。UnityEditor.GenericMenu - Unity 脚本 APIhttps://docs.unity.cn/cn/current/ScriptReference/GenericMenu.htmlusing UnityEngine;using UnityEditor;public class GenericMenuTest : EditorWindow{ [MenuItem("Tools/GenericMenuTe

2021-11-11 20:08:04 853

原创 Unity编辑器拓展(ReorderableList)

ReorderableList可重新排序的列表代码实例using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEditor;using UnityEditorInternal;using System;[Serializable]public class Element : ScriptableObject{ public Texture icon

2021-11-10 20:54:13 900

原创 Unity编辑器拓展(Atrribute/Event.current)

常用Atrribute1.InitializeOnLoad //加载脚本时初始化2.InitializeOnLoadMethod //在 Unity 加载时初始化编辑器类方法3.DidReloadScripts //重新加载脚本后调用方法4.PostProcessScene //加载场景调用方法5.PostProcessBuild //打包完成调用方法6.OnOpenAsset //用于打开 Unity 中某个资源的回调属性Event.current检测鼠标键盘输入.

2021-11-10 19:28:07 1110

原创 Unity编辑器拓展(ScriptableObject/EditorPrefs)

ScriptableObject1.继承ScriptableObject2.CreateAssetMenu特性右键创建或者ScriptableObject.CreateInstance<>()代码创建using System.Collections;using System.Collections.Generic;using UnityEngine;[CreateAssetMenu(fileName = "Data", menuName = "ScriptableObj.

2021-11-09 19:23:00 228

原创 Unity编辑器拓展(Handles/EditorTool)

HandlesScene视图中的自定义 3D GUI 控件和绘制操作。UnityEditor.Handles - Unity 脚本 APIhttps://docs.unity.cn/cn/current/ScriptReference/Handles.html1.添加一个脚本到场景中的物体上(HandleExample.cs)using UnityEngine;[ExecuteInEditMode]public class HandleExample : MonoBehaviour.

2021-11-09 17:36:44 586

原创 Unity编辑器拓展(Gizmos)

Gizmos辅助图标用于协助在 Scene 视图中进行视觉调试或设置。所有辅助图标绘图都必须在此脚本的OnDrawGizmos或OnDrawGizmosSelected函数中进行。UnityEngine.Gizmos - Unity 脚本 APIhttps://docs.unity.cn/cn/current/ScriptReference/Gizmos.html代码示例using System.Collections;using System.Collections.Ge...

2021-11-08 20:39:32 356

原创 Unity编辑器拓展(AssetDatabase)

AssetDatabase用于访问资源并针对资源执行操作的接口。(创建目录 ,创建材质,查询是否存在,GUID/路劲转换,加载等)。UnityEditor.AssetDatabase - Unity 脚本 APIhttps://docs.unity.cn/cn/current/ScriptReference/AssetDatabase.htmlAssetDatabase常用APIusing System.IO;using UnityEditor;using UnityEngine;

2021-11-08 16:06:40 631

原创 Unity编辑器拓展(Project)

Project1.EditorApplication.projectWindowItemOnGUI //绘制的回调2.EditorApplication.RepaintProjectWindow(); // 更新Project窗口3.EditorApplication.projectChanged //Project窗口变化回调(创建资源或对其进行重命名或重定父级,以及移动或重命名项目中的文件夹)using UnityEngine;using UnityEditor;using .

2021-11-07 21:38:35 271

原创 Unity编辑器拓展(Hierarchy)

Hierarchy1.EditorApplication.hierarchyWindowItemOnGUI //绘制的回调2.EditorApplication.RepaintHierarchyWindow(); // 更新Hierarchy窗口3.EditorApplication.hierarchyChanged //Hierarchy窗口变化回调(创建对象以及对其进行重命名、重定父级或销毁,以及加载、卸载、重命名或重新排序已加载的场景)using UnityEngine;usin.

2021-11-07 21:01:45 771

Unity对话系统编辑器

使用GrahicView,UIElement,Node等unity原生的API制作的对话系统编辑器,内附一个demo,代码注释齐全

2021-11-22

TopDown Engine 2.2.1.unitypackage

这是一款非常快速、紧密、移动友好、健壮和可扩展的引擎,以质量和游戏感觉为核心,开始通过Unity以自上自下的视角创建你自己的2D或3D游戏。它被设计作为各种自上而下的游戏,和任何游戏的相机定位在上面的动作。这是一个快速、易于生产、多功能、轻量级和易于扩展的解决方案,将帮助您为您的项目提供一个巨大的提升。

2021-10-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除