- 博客(184)
- 资源 (26)
- 收藏
- 关注
原创 LayoutSystem布局系统
简介: LayoutSystem,是UGUI中由CanvasUpdateSystem发起(m_LayoutRebuildQueue中大部分都是LayoutRebuilder)的关于布局排列的处理系统。类图:布局过程核心代码讲解:LayoutRebuilder脏标记:UGUI组件(如Graphic、ScrollRect…)在需要布局处理时会通过标记的方式将自身RectTransform封装成一个LayoutRebuilder对象添加进Canv...
2024-06-22 21:00:43
172
原创 RPG游戏完整指南
本教程教大家如何使用Unity创建一个RPG游戏,玩家可以在城镇场景中进行导航并寻找战斗,并在战斗中遇到不同类型的敌人。玩家可以向敌人施加不同的动作,如:常规攻击和撤离。这会是一个十分有趣的体验。学习目标:角色寻路、相机跟随、熟悉战斗系统(如:状态机、追随、攻击效果等)环境:unity2021+urp。
2024-06-16 00:50:47
530
原创 Button
Button Click 触发过程流程1. EventSystem的Updateprotected virtual void Update(){ if (current != this) return; TickModules(); //遍历并刷新所有的InputModules,更新Modules中的m_LastMousePosition、m_MousePosition //..略..// //执行当前InputModule的Process,由
2022-04-12 10:15:23
279
原创 Selectable
简介: Selectable是Button、InputField、Toggle、ScrollBar、Slider、Dropdown的基类。类图(部分):操作流程:SelectHandler Selectable的基础事件:由输入检测(InputModule)与输入响应模块(Selectable等组件)调用用来更换EventSystem当前对象时被触发的事件类型。部分核心代码:EventSystem.cs//输入检测与输入响应的模块调用,变化当前选中的Game...
2022-04-12 10:12:54
606
原创 事件系统-输入模块
管理所有的输入检测模块(InputModule)并帧调用Module的执行(Process)调动射线捕捉模块(Raycasters),为InputModule提供结果(具体的触点所穿透的对象信息)InputModule 管理更新EventData 判断当前的操作事件,并通知具体的EventSystemHandler 进行逻辑处理。事件监听及触发分四个部分:事件数据、输入模块、射线碰撞检测、事件调度。事件数据:BaseEventData:是事件数据类的父类,其中包括Eve...
2022-04-12 10:10:50
286
原创 Text实现原理
简介: UGUI的Text就是位图字体,先通过TTF字体将字体形状生成在位图中,接着就是将正确的UV设置给字体的Mesh。不同于Image不仅要处理网格还要处理材质和纹理,Text并不需要对材质纹理做更加具体的处理,因为Text的材质默认来自于它的字体本身或是它身上所被设置的材质。位图字体: 位图字体是一种计算机字体,它使用一个称为像素的图片元素来构建一个称为glyphs的符号,组成一个总的位图字体。当一个紧凑的、快速加载的字体必不可少时,就使用这种字体。位图字体有时被称为光栅字体,同...
2022-04-12 10:04:56
398
原创 Image
简介 Image继承了MaskableGraphic, ISerializationCallbackReceiver, ILayoutElement, ICanvasRaycastFilter,提供了四种ImageType:Simple(普通)、Sliced(切割)、Tiled(平铺)、Filled(填充)。继承了ILayoutElement是一个布局元素,可以被各种布局组(ILayoutGroup)所包含,将它和其他布局元素进行布局。更新流程图ImageType方式:Sim...
2022-04-12 09:54:44
413
原创 MaskableGraphic
简介 MaskableGraphic在 Graphic的基础上实现了裁剪与遮罩功能。 这主要是由 IClippable、IMaskable 两个接口来实现的。在Graphic更新材质的流程中有提及Mask。Graphic 可以理解成由骨头和皮肤所组成,骨头即顶点信息所构建的网格(Mesh),皮肤则是依附于Mesh的材质和纹理。实际上Mesh是不可见的,对于可见物的处理(例如Mask遮罩剔除)都是针对于Material。理解清楚IClippable与IMas...
2022-04-12 09:47:26
667
原创 Graphic
简介: Graphic 作为图像组件的基类,主要实现了网格与图像的生成及刷新方法。在生命周期Enable阶段、Editor模式下的OnValidate中、层级/颜色/材质改变时都会进行相应的刷新(重建)。重建过程主要通过 CanvasUpdateSystem 最终被Canvas所重新渲染。图形绘制过程注册Canvas.willRenderCanvases事件,UI发生变动,该事件触发 从渲染队列中获取元素,分别调用ReBuild方法 Rebuild方法中完成网格、材质等更新 u..
2022-04-12 09:39:44
239
原创 CanvasUpdateSystem 画布刷新系统
制作UI过程,添加Canvas组件将会打断和之前元素DrawCall的合并,每个Canvas都会开始一个全新的DrawCall,当Canvas需要重绘的时候会调用SendWillRenderCanvases()方法。Canvas.cs(部分源码)//部分源码public sealed class Canvas : Behaviour{ public delegate void WillRenderCanvases(); //公有事件,在CanvasUp...
2022-04-12 09:32:33
1880
原创 UGUI原理简述
绘制原理核心概念:Mesh、Vertex、Triangle、UV说明:Mesh:网格,决定物体的形状 Vertex :顶点,组成Mesh的元素 Triangle :三角形,决定顶点顺序 UV:纹理贴图坐标下面使用例子依次介绍绘制原理,编写脚本:public class CreateImage : MonoBehaviour{ private MeshFilter meshFilter; private MeshRenderer re...
2022-04-12 09:25:41
1343
原创 设计模式实例(Lua)笔记之七(Decorator模式)
1.描述 就说说"我"上小学的的糗事吧。我上小学的时候学习成绩非常的差,班级上 40 多个同学,我基本上都是在排名 45 名以后,按照老师给我的定义就是“不是读书的料”,但是我老爸管的很严格,明知道我不是这块料,还是往赶鸭子上架,每次考试完毕我都是战战兢兢的,“竹笋炒肉”是肯定少不了的,能少点就少点吧,肉可是自己的呀。四年级期末考试考完,学校出来个很损的招儿(这招儿现在很流行的),打印出成绩单,要
2015-08-21 14:19:06
1984
原创 设计模式实例(Lua)笔记之六(Adapter模式)
1.描述 “我”在 2004 年的时候带了一个项目,做一个人力资源管理,该项目是我们总公司发起的项目,公司一共有 700 多号人,包括子公司,这个项目还是比较简单的,分为三大模块:人员信息管理,薪酬管理,职位管理,其中人员管理这块就用到了适配器模式,是怎么回事呢?当时开发时明确的指明:人员信息简管理的对象是所有员工的所有信息,然后我们就这样设计了一个类图: 这个项目是 04 年年底
2015-08-21 12:30:41
1732
1
原创 设计模式实例(Lua)笔记之五(Bridge模式)
1.描述 今天我要说说我自己,梦想中的我自己,我身价过亿,有两个大公司,一个是房地产公司,一个是服装制造业,这两个公司都很赚钱,天天帮我在累加财富,其实是什么公司我倒是不关心,我关心的是是不是在赚钱,赚 了多少,这才是我关心的,我是商人呀,唯利是图是我的本性,偷税漏税是我的方法,欺上瞒下、压榨员工血汗 我是的手段嘛,呵呵,同时我公司也 会发展,终于在有一天我觉得赚钱速度太慢,于是我上下疏
2015-08-20 16:25:47
2532
原创 设计模式实例(Lua)笔记之五(Prototype 模式)
1.描述 首先从实际生活来了解原型模式的由来,假设你有一份非常好的讲义,你的朋友也想要一份,那么怎么办?重新手抄一份?显然不是,当然是用复印机复印一份来得方便、直接,并且准确性也高,这种用原型来复制而不是重新创建的思维方式就是原型模式的核心思想。 Prototype Pattern也是一种创建型模式,它关注的是大量相同或相似对象的创建问题。应用原型模式就是建立一个原型,然后通过对原型来
2015-08-20 10:37:30
2723
原创 设计模式实例(Lua)笔记之四(Builder 模式)
1.描述: 又是一个周三,快要下班了,老大突然又拉住我,喜滋滋的告诉我“牛叉公司很满意我们做的模型,又签订了一个合同,把奔驰、宝马的车辆模型都交给我我们公司制作了,不过这次又额外增加了一个新需求:汽车的启动、停止、喇叭声音、引擎声音都有客户自己控制,他想什么顺序就什么顺序,这个没问题吧?”。 看着老大殷切的目光,我还能说啥,肯定的点头,“没问题!”,加班加点做呗,“再苦再累就当自己二
2015-08-20 10:25:26
2131
1
原创 设计模式实例(Lua)笔记之三(Singleton单例模式)
1.描述: 这个模式是很有意思,而且比较简单,但是我还是要说因为它使用的是如此的广泛,如此的有人缘,单例就是单一、独苗的意思,那什么是独一份呢?你的思维是独一份,除此之外还有什么不能山寨的呢?我们举个比较难复制的对象:皇帝。 中国的历史上很少出现两个皇帝并存的时期,是有,但不多,那我们就认为皇帝是个单例模式,在这个场景中,有皇帝,有大臣,大臣是天天要上朝参见皇帝的,今天参拜的皇帝应该和昨天、
2015-08-20 10:19:39
4491
原创 设计模式实例(Lua)笔记之二(AbstractFactory抽象工厂模式)
1.描述 上一篇博文讲到女娲造人,人是造出来了,世界时热闹了,可是低头一看,都是清一色的类型,缺少关爱、仇恨、喜怒哀乐等情绪,人类的生命太平淡了,女娲一想,猛然一拍脑袋,Shit!忘记给人类定义性别了,那怎么办?抹掉重来,然后就把人类重新洗牌,准备重新开始制造人类。由于先前的工作已经花费了很大的精力做为铺垫,也不想从头开始了,那先说人类(Product 产品类)怎么改吧,好,有了,给每
2015-08-19 22:33:22
1673
原创 设计模式实例(Lua)笔记之一(Factory Method工厂方法模式)
1.描述 女娲补天的故事大家都听说过吧,今天不说这个,说女娲创造人的故事,可不是“造人”的工作,这个词被现代人滥用了。这个故事是说,女娲在补了天后,下到凡间一看,哇塞,风景太优美了,天空是湛蓝的,水是清澈的,空气是清新的,太美丽了,然后就待时间长了就有点寂寞了,没有动物,这些看的到都是静态的东西呀,怎么办?别忘了是神仙呀,没有办不到的事情,于是女娲就架起了八卦炉(技术术语:建立工厂)开始创建
2015-08-19 22:25:34
2204
原创 我所理解cocos2d-x 3.6 lua --使用Cocos Studio
Cocos是触控科技推出的游戏开发一站式解决方案,包含了从新建立项、游戏制作、到打包上线的全套流程。开发者可以通过cocos快速生成代码、编辑资源和动画,最终输出适合于多个平台的游戏产品。 Cocos的主要产品有Cocos Studio、Cocos2d-x(Cocos Framework)、Cocos Code IDE。 Cocos Studio:是Cocos2d-x引擎配套的跨平台游戏开发工具
2015-08-01 18:07:09
6605
2
原创 Lua代码编写规范
Lua代码编写规范开发中,大量使用lua,暂时根据当前状况,总结相对而言较好的规范,在多人协作中可以更好的开发、交流。介绍该文档旨在为使用lua编写应用程序建立编码指南。制订编码规范的目的:统一编码标准,通用,提高开发效率;使代码通俗易懂,易于维护。切记:善用调试器。一、命名惯例1.所有lua文件命名时使用小写字母、下划线2.类名、变量名尽可能使用有意义的英文,类名使用帕斯卡
2015-07-23 22:04:26
11667
原创 我所理解cocos2d-x 3.6 lua -- Cocos如何绑定Lua自定义类
cocos2d-x 2.x 与 cocos2d-x 3.x 差异(tolua++) cocos2d-x在2.x版本里就是用toLua++和.pkg文件这么把自己注册进Lua环境里的,然而从cocos2d-x 3.x开始,用bindings-generator脚本代替了toLua++。 bindings-generator脚本的工作机制是: 1、不用编写.pkg和.h文件了
2015-06-18 22:56:51
9507
原创 我所理解cocos2d-x 3.6 lua -- 初识MVC
简单说几句: 最近的游戏项目中使用了lua脚本来开发,项目中用到了MVC框架. 从cocos2d-x 3.6 创建lua demo, 简单分享一下思路和一些开发中的技巧。先简单说说MVC,即Model View Controller。Model(模型):一般负责数据的处理View(视图):一般负责界面的显示Controller(控制器):一般负责前端的逻辑处理比如 :拿一款手机游戏来说,界面
2015-06-18 18:13:00
9782
9
原创 我所理解lua 语言中的点、冒号与self
lua编程中,经常遇到函数的定义和调用,有时候用点号调用,有时候用冒号调用,这里简单的说明一下原理。如:点号调用:-- 点号定义和点号调用:girl = {money = 200}function girl.goToMarket(girl ,someMoney) girl.money = girl.money - someMoneyendgirl.goToMarket(girl ,1
2015-06-18 11:37:15
3766
原创 Lua中的模块与module函数
这篇文章主要介绍了Lua中的模块(module)和包(package)详解,本文讲解了require函数、写一个模块、package.loaded、module函数等内容. 从Lua5.1版本开始,就对模块和包添加了新的支持,可是使用require和module来定义和使用模块和包。require用于使用模块,module用于创建模块。简单的说,一个模块就是一个程序库,可以通过require
2015-06-13 15:57:10
8260
原创 Cocos2d-x使用Luajit实现加密
项目要求对lua脚本进行加密,查了一下相关的资料 ,得知lua本身可以使用luac将脚本编译为字节码(bytecode)从而实现加密,试了一下,确实可行。下面是使用原生的lua解释器编译字节码: 1、新建一个名为1.lua的文件,里面只有一句话print("Hello Lua"),新建一个空的out.lua脚本文件 2、开始--运行--cmd3、luac -o out.lua 1.lu
2015-01-31 17:07:15
2821
原创 lua 函数回调技巧
技巧1:local a = {};function b() print("Hello World")enda["sell"] = {callFunc =b}a["sell"].callFunc()技巧2: 使用lua 自带的 unpack : 解释:把一直数组(只有连续数字下标的 table)展开成一串返回值,但是对用字符串或别的东西做 key 的 table 无能为力。fu
2014-11-14 14:32:54
4589
原创 Lua中的元表与元方法
前言Lua中每个值都可具有元表。 元表是普通的Lua表,定义了原始值在某些特定操作下的行为。你可通过在值的原表中设置特定的字段来改变作用于该值的操作的某些行为特征。例如,当数字值作为加法的操作数时,Lua检查其元表中的"__add"字段是否有个函数。如果有,Lua调用它执行加法。我们称元表中的键为事件(event),称值为元方法(metamethod)。前述例子中的事件是"add",元方法是执行加
2014-10-23 22:36:48
2165
原创 VS2012 [warning C4996]: 'sprintf': This function or variable may be unsafe.
使用VS2012编译时,会出现以下警告:warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for detail
2014-10-20 21:14:20
2997
原创 关于cocos2d-x3.0和2.0之间的区别
区别1.去CC之前2.0的CC**,把CC都去掉,基本的元素都是保留的2.0CCSprite CCCallFunc CCNode ..3.0Sprite CallFunc Node ..区别2.cc***结构体改变2.0 ccp(x,y) ccpAdd(p1,p2)ccpSubccpMultccpLength(p)ccpDot(p1,p2);ccc
2014-10-08 19:20:31
3830
Snapdragon Profiler v2022.5
2023-03-24
Objective-C程序设计(第6版带中文目录 )
2019-07-19
More Effective c# 清晰版
2018-11-03
cocos2d-x游戏实例 萝莉快跑
2013-10-28
OPenGL ES 模板
2013-09-25
Android SDK 中文开发文档
2012-12-06
Android2.0游戏开发实践宝典源代码
2012-12-05
Erlang程序设计中文版
2012-10-09
Erlang安装手册
2012-10-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人