基本原理
Break The Sky
这个作者很懒,什么都没留下…
展开
-
Unity3D协程背后的迭代器
初识Unity3D中的协程假设需要调用一个方法,正常的执行逻辑是该法一定会在返回前执行书写的逻辑,这意味着什么呢?意味着我们在执行某个方法的时候必须要在某一帧内执行完毕,这样也就说明了,直接调用一个方法不可能是在一段时间内逐步执行,比如说,使一个游戏对象的颜色实现随时间变化而变化,如果直接调用一个方法,一定是不行的,他会在一瞬间变化,private void Fade() { for(float f = 1f;f>0f;f--) {原创 2020-07-20 12:17:02 · 348 阅读 · 0 评论 -
Lambda表达式
虽然匿名函数已经大大的简化了委托的语法,但是更简介的是Lambda,使用lambda与匿名方法十分类似,因为使用匿名方法可以做到的,使用Lambda也可以做到,并且和匿名方法一样的是,Lambda表达式类型本身并非委托类型,但是可以通过多种方式显示的转换程一个委托实例,进一步的说,Lambda是匿名方法进一步的烟花和简化,来观察下面的例子void Start() { List<Vector3> VList = new List<Vector3>();原创 2020-07-14 11:41:00 · 154 阅读 · 0 评论 -
闭包与匿名函数
什么是闭包?所谓的闭包指的是:一个方法除了能和传递给他的参数交互之外,还可以和上下文进行更大成都的互动,但是闭包并不是C#语言独有的,事实上,这是一个很早的概念,而且现在很多驻留的编程语言都接纳了这个概念,如果要真正理解闭包要理解两个概念1.外部变量:或者称为匿名方法的外部变量,指的是定义了一个匿名方法的作用域内(方法内部的)局部变量或者参数,对匿名方法来说是外部变量2.捕获的外部变量:即在匿名方法内部使用的外部变量,也就是局部变量在匿名方法内部便是一个捕获的外部变量知道这两种概念之后,再结合闭包的原创 2020-07-14 10:39:22 · 441 阅读 · 0 评论 -
委托与匿名方法
首先先来说一下匿名方法,通常情况下,在使用委托的时候,往往需要声明相应的方法,这些方法需要符合返回值类型,参数都与委托类型定义的方法原型相同的条件,但是这样做的话,必须要创建与委托方法原型对应的新的方法,这样做起来可能会使代码变得十分臃肿,匿名方法应运而生。下面先来看一个例子void Start() { Action<string> tellMeYourName = delegate (string name) { string原创 2020-07-13 15:29:19 · 459 阅读 · 0 评论 -
用事件实现消息系统
使用事件来实现消息系统的最重要的一个细节就是,对象要具有哦内阁制已经订阅(注册)的观察者对象发生了特定事件的能力而这种能力,是通过事件成员来实现的,比如说在游戏世界中,两个英雄相互攻击,如果受到攻击,播放受到攻击的出血动画,那么这个出血动画就可以认为是一个事件,界面会显示掉血的数字好的,那么从游戏回到代码,从上例可以看出,一个事件成员的类型需要有一下功能,来实现这种交互机制1)方法可以订阅他对事件的关注2)方法可以取消订阅它对事件的关注3)事件发生的时候,订阅了该时间的方法会收到通知并且可以做出相应原创 2020-07-12 14:29:03 · 375 阅读 · 0 评论 -
C#深入学习委托
1.向SendMessage和BroadcastMessage说再见首先我们知道小标题所说的两个方法的作用是通过参数名来进行方法的调用,但是这两个函数过于依赖反射机制来查找消息对应的被调用的函数,频繁的使用反射机制会影响性能能,更加严重的问题是,使用这种机制后代码的维护成本太高,加入在一个开发团队中如果某一个方法被重新命名甚至被删除,会导致很严重的隐患,并且在编译器严重,他是没有错误的,因此也不会通过一些错误的提示来告诉开发者某些方法不存在,另外在一个团队的开发中,方法的命名如果一样呢,这也是个很大的隐患原创 2020-07-11 16:29:11 · 222 阅读 · 0 评论 -
字典遍历方法
Dictionary<string, int> list = new Dictionary<string, int>(); list.Add("1", 1); // foreach(var item in list) { Debug.Log(item.Key + item.Value); } //使用KeyValuePair foreach(KeyV原创 2020-07-08 10:10:30 · 916 阅读 · 0 评论 -
c#三种数组数据结构的比较
1.Array数组在C#语言中,数组是最简单的数据结构之一,其具有一下三个特点1.数组储存在连续的内存上2.数组的元素都是相同的类型,或者基于相同类型的衍生物,因此,数组又被认为是同质数据结构3.数组可以通过下标来访问数组的常规操作1.分配储存空间,例如声明一个新的数组int[] arr = new int[5].2.访问数组中的元素数据,例如通过下表来获取数组中的某个元素;int i = arr[0];在创建新的数组的时候,将在Mono运行时的托管堆中分配一块连续的内存空间来盛放数量为si原创 2020-07-08 08:44:30 · 1288 阅读 · 1 评论 -
c#装箱与拆箱
在c#语言中有两种类型,分别是引用类型和值类型,由于值类型不在托管堆中分配、不被垃圾回收机制印象、同样也不需要引用(指针)来引用,因此可能看上去,值类型要比引用类型更加轻巧,但是有的时候,我们所需要的是一个引用,而不是值类型,如下例void Start() { ArrayList array = new ArrayList(); Vector3 vector; for(int i = 0;i< 3;i++) {原创 2020-07-07 10:50:47 · 345 阅读 · 0 评论 -
Unity3D脚本执行方法的顺序
1.编译器阶段Reset方法:当脚本第一次添加到游戏对象活当执行Reset命令时回调用Reset方法,用来初始化脚本的各个属性2.场景第一次加载阶段该阶段其实也就是脚本第一次加载的阶段,一下两个方法会在脚本第一次加载时被调用Awake方法:在Start方法之前调用,换句话,就是在prefab(预设)刚刚实例化后边调用该方法OnEnable方法:这个方法在对象可用之后被调用,需要注意的时,仅在对象激活状态下可用,也就是当一个MonoBehaviour实例被创建时可用,例如当加载一个或一个拥有该组件的原创 2020-07-06 18:44:13 · 1098 阅读 · 0 评论 -
c#对象池详解
在系统设计中,经常会使用“池”的概念。比如数据库连接池,socket连接池,线程池,组件队列。“池”可以节省对象重复创建和初始化所耗费 的时间,可以简化对象获取和使用的过程。对于那些被系统频繁请求和使用的对象,如果使用这种机制,可以使系统性能得到很大提高。特别象数据库连接这种对 象,客户端与数据库服务器端建立连接时,是比较慢的,如果每次进行数据库操作,都要先进行数据库连接,系统效率将非常低下。...转载 2020-04-22 22:14:55 · 3898 阅读 · 0 评论 -
unity-阴影、烘培、光照贴图
阴影效果:使游戏界面中的物体模拟在光照下的真实效果阴影类型:(各有好处)1.软阴影 锯齿比较少2.硬阴影软阴影比硬阴影更加消耗资源,但是值消耗GPU资源使用阴影功能的注意事项1.确保光源的阴影类型是否选中2.确保被投影的物体是否接受投影3.确保投影物体是否有投影属性烘培、光照贴图效果作用:在游戏中很多的游戏物体并不是动态的而是一成不变的,如果使用实时渲染或者软硬阴...原创 2020-01-18 17:42:38 · 1935 阅读 · 0 评论 -
各类滤波器的参数及含义
声音unity引擎所支持的印业格式文件共八种:(一):Mod(二):.It(三):.S3m(四):Xm这四种是用于音频跟踪模块(五):.AIFF 适用于较短的音乐文件,可作为游戏打斗的音效(六):.WAV 适用于较短的音乐文件,可做游戏打斗的音效(七):.Mp3适用与较长的音乐文件,可作为游戏的背景音乐(八) :.OGG适用于较长的音乐文件,可以作为游戏背景音乐音乐管理器...原创 2020-01-10 20:45:25 · 4105 阅读 · 0 评论 -
unity之视频播放器
首先需要准备一段视频,包括mp4、mov、webm、wmv等常用格式创建plan,并且为其添加VideoPlayer组件,其中source有两种模式:一种是VideoClip一种是URL,第一种模式是需要播放的视频就在项目中,另一个则可以放入网上下载好的视频链接,同样可以理解为是下载好的视频的存储路径然后将所要播放的视频拖拽到VideoClip(或者填写视频的储存地址、视频链接也行)效果如...原创 2019-12-29 21:03:04 · 3600 阅读 · 0 评论