- 博客(30)
- 收藏
- 关注
原创 CSDN将不再继续使用,后续文章会发布到个人博客
因众所周知的原因,后续将不会再继续使用CSDN发布新博客,而是使用个人博客发布个人博客地址:仙猫洞 - 程序、游戏及其他一个爱摸鱼的游戏程序员http://cathole.top/欢迎访问收藏
2021-12-09 09:17:04
3195
2
原创 在Unity中使用unsafe代码实现0GC的文本打字机效果
近日项目里需要实现一个对话文本的打字机效果,在网上看了一圈,居然一水的都是用SubString或者字符串+=拼接实现的,这样虽然方便,但是每次都会产生约30B的内存分配,最终只能自己动手写unsafe代码来实现文本打字机效果了。demo代码如下:using System.Collections;using System.Collections.Generic;using UnityE...
2019-08-27 20:23:41
1289
原创 GameFramework新手常见问题汇总(持续更新)
Q:我按照笨木头博客写的加载场景的代码为什么没用?A:加载路径写以Assets/开头的全路径。Q:为什么我在用框架的ab编辑器打ab包时会报错SteamingAssets文件夹为空?A:将build event指定为none即可。Q:ab包打完后怎么放到项目里作为初始资源?A:将Package或Packed目录下对应平台和版本目录下的ab包全部复制到Streamin...
2019-07-08 19:43:58
4208
原创 关于Unity在运行时使用AddComponent添加脚本后,新脚本的生命周期执行时机探究
今日上班摸鱼水群时,某群友提出了本文标题涉及的问题,即在运行时通过调用AddComponent方法添加一个新脚本A,A的Awake,Start,Update等生命周期方法会在Add的这一帧执行还是等到下一帧执行。随后我便马上打开Unity,写了两个测试脚本,具体代码如下:using System.Collections;using System.Collections.Generic;...
2019-07-05 22:29:27
12323
4
原创 UGF游戏框架实例开发教程—FlappyBird(九)资源打包与工程的发布
在之前的篇章中我们已经把游戏内容都完成了,那么最后要做的就是资源打包与工程发布的事情了在上方菜单栏中点击GameFramework/AssetBundleTools/AssetBundleEditor进行AB包资源编辑点击左侧AssetBundle List下方的Add按钮,添加AB包,并为每个AB包勾选Packed然后在右侧AssetList中为每个包选中对应的资源,点击下方的<<按...
2018-06-28 12:16:42
6755
4
原创 UGF游戏框架实例开发教程—FlappyBird(八)积分显示与游戏结束的处理
新建一个UI脚本,命名为ScoreForm,继承自UGuiForm编写如下代码 /// <summary> /// 积分界面脚本 /// </summary> public class ScoreForm : UGuiForm { public Text scoreText; /// <summa...
2018-06-28 12:15:34
3544
4
原创 UGF游戏框架实例开发教程—FlappyBird(七)子弹发射与小鸟飞行功能的实现
与之前的操作类似,新建一个子弹的实体数据类,命名为BulletData/// <summary> /// 子弹实体数据 /// </summary> public class BulletData : EntityData { /// <summary> /// 发射位置 /// &...
2018-06-28 12:13:53
4433
4
原创 UGF游戏框架实例开发教程—FlappyBird(六)循环滚动背景图与定时生成管道功能的实现
从本篇开始我们要编写实体相关的业务逻辑代码先去EntityComponent中添加EntityGroup为背景实体创建实体数据类,命名为BgData,继承自EntityData定义出需要用到的数据的字段,并提供构造方法 /// <summary> /// 背景实体数据 /// </summary> public class BgData : E...
2018-06-27 12:53:27
5109
3
原创 UGF游戏框架实例开发教程—FlappyBird(五)菜单流程的代码编写
在正式开始写代码之前,我们需要先将命名空间给重命名一下随便找一个Scripts下的文件,修改命名空间为FlappyBird修改命名空间后,有几个地方需要重新设置OK,接下来处理流程相关的东西,创建两个类,分别命名为ProcedureMenu和ProcedureMain,代表菜单流程与主流程,作为流程类,需要继承ProcedureBasenamespace FlappyBird{ /// ...
2018-06-27 12:53:20
9173
8
原创 UGF游戏框架实例开发教程—FlappyBird(三)制作UI的预制体
在这篇教程里,我们将开始制作UI的预制体首先来制作菜单面板在GameFramework物体下找到UI Form Instances,为其添加一个空物体,命名为MenuForm,将其长宽与锚点对齐四个角,添加Canvas与CanvasRenderer组件然后依次为其添加背景与标题作为子物体,设置好锚点添加两个按钮,分别修改文字为开始与设置最后添加三段文本作为游戏提示接下来我们以相同的方式来创建设置面...
2018-06-26 10:59:56
7759
4
原创 UGF游戏框架实例开发教程—FlappyBird(二)制作2D对象的预制体
进入GameFramework场景先把Game视图的分辨率调到1920*1080相机修改为正交模式新建一个2DSprite,命名为Bg,Sprite设置为bg,缩放修改为2.3,X轴位置修改为-4.5,使其对齐相机视野的左侧之后为其添加一个2DSprite作子物体,Sprite设置为back,Order in Layer设为2,修改其位置与缩放到一个合适的位置然后将Bg复制两份,分别修改X轴使这三...
2018-06-26 10:59:34
8704
原创 基于有限状态机在Unity3D中实现的简单搓招系统
在诸如街霸、拳皇等格斗游戏中,搓招指的是玩家通过在短时间内连续输入特定的指令来释放角色的招式(比如右下右拳释放升龙拳) 那么如何通过状态机来实现搓招呢? 我们可以让每个招式都持有一个状态机,把这个招式要求的输入指令作为状态机的状态而存在。依然以升龙拳为例,我们可以把升龙拳的4个指令视为4个状态,每个状态都对应一种输入指令,在玩家输入指定指令后,切换到下一个指令的状态(如果超时或输入...
2018-06-06 17:02:18
3466
2
原创 简易版GameFramework游戏框架搭建教程(八)Task
在框架中,Web请求,资源的下载或加载会以任务的形式进行处理,Task作为框架的基础功能,所负责管理的就是这三类任务打开工程,在Base文件夹下新建一个Task文件夹,并新建3个类文件其中ITask是任务接口,主要存储任务执行时所需的数据ITaskAgent是任务代理接口,负责对任务进行处理(实际的处理逻辑则通过调用具体模块的辅助器执行,这一点在后面编写需要使用任务功能的模块时会涉及到)TaskP...
2018-06-03 18:03:42
3145
13
原创 简易版GameFramework游戏框架搭建教程(七)ObjectPool
对象池是在游戏开发中,为了避免频繁的创建、销毁对象带来的内存消耗的常见优化技术下面是官网的介绍打开工程,建立ObjectPool文件夹,然后其中建立4个文件其中ObjectBase是池对象基类,所有需要被对象池管理的对象都需要继承该类(实际使用的对象被封装在这个类的派生类中,之所以这么封装是为了方便池对象生命周期的管理)。IObjectPool是对象池接口,ObjectPool是对象池类,使用链表...
2018-06-03 12:44:44
2799
原创 简易版GameFramework游戏框架搭建教程(六)Event
事件广播机制可以说是在各种框架里比较常见的解耦机制了,GF自然也不例外,在本篇文章中我们便来编写Event模块下面是官网的介绍 在正式开始编写Event模块之前,我们需要完成一个前置的框架基础功能——ReferencePool(引用池),ReferencePool提供了一个IReference接口,只有实现了该接口的对象才会被纳入引用池管理当中,而在GF里,主要由Event模块的事...
2018-05-31 23:44:14
2525
原创 简易版GameFramework游戏框架搭建教程(五)DataNode
这次我们来编写一个比较简单的模块——DataNode(数据结点)下面是官网的介绍首先新建一个DataNode文件夹,在其中新建DataNode类与DataManager类DataNode是数据结点类,DataNodeManager是数据结点管理器,负责管理所有数据结点打开DataNode类,为其添加对应的字段与属性/// <summary>/// 数据结点/// </summ...
2018-05-29 21:51:13
2773
1
原创 简易版GameFramework游戏框架搭建教程(四)Procedure
Fsm模块在上一篇文章中已经完成,我们便可以开始着手Procedure模块的开发了下面是官网对Procedure的介绍首先新建一个Procedure文件夹,在其中新建ProcedureBase类和ProcedureManager类ProcedureBase是流程基类,属于一种状态。ProcedureManager是流程管理器,负责管理所有流程。打开ProcedureBase,使其继承FsmStat...
2018-05-29 17:50:29
3329
3
原创 简易版GameFramework游戏框架搭建教程(三)Fsm
在前一篇文章中,我们已经将框架里几个基本的类编写完成,在本文中,将开始正式进行功能模块的开发我们第一个开发的模块将是Fsm模块,因为作为管理整个游戏运行时生命周期的Procedure模块,是基于Fsm的官网中关于Fsm的介绍首先新建一个Fsm文件夹,在其中再新建4个类文件Fsm是状态机类,IFsm是状态机的接口(可能会有人疑惑为什么还要再写一个接口?别急,这一点到后面就能明白了),FsmState...
2018-05-27 18:08:55
4424
3
原创 简易版GameFramework游戏框架搭建教程(二)Entry
我们从新建一个Unity项目开始,名字叫SimpleGameFramework(下文简称SGF)建立好框架与其脚本的目录然后就可以开始框架Entry部分的搭建了在GF的设计中,框架被分为了两部分,一部分独立Unity引擎,另一部分则依赖于Unity引擎:自然而然的,GF里Entry也被分为了两部分,既然我们要搭建的是简易版的GF,那么在设计上就不采用一部分与Unity分离的形式,而是全部依赖于Un...
2018-05-27 18:06:34
5719
4
原创 简易版GameFramework游戏框架搭建教程(一)前言
GameFramework(以下简称GF),是由Ellan开发的一款开源Unity游戏框架,以下是来自官网的简介:Game Framework 是一个基于 Unity 5.3+ 引擎的游戏框架,主要对游戏开发过程中常用模块进行了封装,很大程度地规范开发过程、加快开发速度并保证产品质量。在最新的 Game Framework 版本中,包含以下 17 个内置模块,后续还将开发更多的扩展模块供开发者使用...
2018-05-27 18:06:23
13786
3
转载 Unity UGUI 原理篇(五):Auto Layout 自动布局
Auto Layout SystemAuto Layout System 是基于 Rect Transform Layout System 之上的系统,自动调整一个或多个的元素大小、位置、间格,又分为 Layout Controllers(父物件) 与 Layout Elements(子物件) 两部分,一个简单的 Auto Layout 架构如下 (此处介绍理论,实作留到后面)Layout Ele...
2018-05-01 16:45:13
1713
转载 Unity UGUI 原理篇(四): Event System Manager 事件与触发
Event System在建立出UI时,Unity会自动帮我们建立Event System物件,此物件是基于滑鼠、触摸、键盘的输入方式,传送 Event 到 Object 上,物件下有3个组件,分别为Event System Manager、Standalone Input Module、Touch Input Module1.Event System Manager控管所有Event,负责将滑鼠...
2018-05-01 16:26:41
3471
1
转载 Unity UGUI 原理篇 (三):RectTransform解析
RectTransformRectTransform 是 Transform 的 2D 对应 Component,Transform 表示单个点,RectTransform 表示一个2D矩形(UI空间),如果父子物体都有RectTransform,那麽子物体可以指定在父物体矩形中的位置与大小,简单来说RectTransform 就是定义UI元素的位置、旋转、大小Anchor (锚点)物体的锚点(对...
2018-05-01 16:22:00
1243
转载 Unity UGUI 原理篇(二):Canvas Scaler 缩放核心
Canvas ScalerCanvas Scaler是Unity UI系统中,控制UI元素的总体大小和像素密度的Compoent,Canvas Scaler的缩放比例影响著Canvas下的元素,包含字体大小和图像边界。SizeReference Resolution:预设萤幕大小Screen Size:目前萤幕大小Canvas Size:Canvas Rect Transform 宽高Scale ...
2018-05-01 16:12:48
9585
转载 Unity UGUI 原理篇(一): Canvas 渲染模式
CanvasCanvas Component 是UI布局和渲染的抽象空间,所有的UI都必须在此元素之下(子物件),简单来说 Canvas 就是渲染 UI 的组件Render Mode UI渲染的方式,有以下三种Screen Space – Overlay:萤幕空间 – 覆盖Screen Space – Camera:萤幕空间 – 摄影机World Space:世界座标空间...
2018-05-01 15:42:15
3370
原创 简单明了的概括C#中==和Equals()方法的区别
C#编程中有两个最常用的比对手段:==运算符与Equals()方法。 那么这两者的区别在哪里呢?1.==在比对值类型时,如果二者值相等,则返回true,否则返回false。2.==在比对引用类型时,如果二者引用的是同一个对象,则返回true,否则返回false。3.Equals()方法,在不重写的情况下,与==没区别。4.微软重写了string的Equals()方法,使得这...
2018-04-14 12:01:37
897
3
原创 在Unity中不能对transform.position.x/y/z直接赋值的原因探究
很多人在学习Unity过程中,都遇到过对transform.position.x/y/z直接赋值时报错的情况。只能用一个Vector3对postion进行整体的赋值至于为什么会无法赋值,有一种很常见的说法:看起来好像很有道理,但是——异议あり!!!真的是这样吗?让我们使用F12导航到transform里,可以看到position是Vector3类型而Vector3里的x/y/z并没有访问限制那么究...
2018-04-14 11:30:54
24379
10
原创 使用UGUI实现多层血条效果
玩过DNF的玩家应该都对这种多层血条效果不陌生不同层数的血条拥有对应的颜色,但是颜色种类不能太多,所以当血条层数多于颜色种类数量的时候,需要按照颜色设定来重复使用血条颜色【例如,总共设定了3种颜色:红、黄、绿,分别对应1、2、3层血条的颜色,那么当血条层数为4时,血条颜色即为红色,5时为黄色,以此类推】实现该效果的主要思路如下:将颜色信息保存到一个数组中,索引顺序根据颜色所对应的层数决定计算出当前...
2018-03-29 11:37:22
3551
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人