- 博客(166)
- 收藏
- 关注
原创 Unity曲面化
很早的一篇文章了,思路就是通过mesh做曲面,如果是要将UI曲面化,需要先将UI的最后的渲染转换到mesh renderer,而不是canvas renderer
2019-10-22 07:46:56
2285
1
原创 设计模式六大原则-接口隔离原则
1、接口隔离原则 客户端不应该依赖它不需要的接口;一个类对另外一个类的依赖应该建立在最小的接口上。三层含义:(1)一个类对另外一个类的依赖应该建立在最小的接口上(2)一个接口代表一个角色,不应该将不同的角色都交给一个接口。因为这样可能会形成一个臃肿的大接口(3)不应该强迫客户依赖他们从不用的方法接口隔离原则的含义是:建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的...
2019-01-06 15:31:09
415
原创 设计模式六大原则-迪米特原则
1、迪米特原则 如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另外一个类的某一个方法的话,可以通过第三者转发这个调用。一个对象应该对其他对象保持最少了解,通俗讲就是一个类对自己依赖的类知道的越少越好,也就是对于被依赖的类,向外公开的方法应该尽可能的少。两点要义:(1)从被以来者的角度:只暴漏应该暴漏的方法或属性(2)从依赖者角度:只依赖...
2019-01-06 15:05:44
238
2
原创 设计模式六大原则-里氏代换原则
1、里氏代换原则(LSP) 子类型必须能够替换掉它们的父类型。一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它觉察不出父类对象和子类对象的区别。也就是说在软件里面,把父类都替换成它的子类,程序的行为没有变化。这里也许会有疑问, 为什么子类可以替换父类的位置,而程序的功能不受影响呢?当满足继承的时候,父类肯定存在非私有成员,子类肯定是得到了父类的这些非私有成员(假设父...
2019-01-05 18:14:42
366
原创 设计模式六大原则-依赖倒置原则
1、依赖倒置原则概述(DIP) 三层含义:(1)高层模块不应该依赖底层模块,两者都应该依赖抽象(2)抽象不应该依赖细节(3)细节应该依赖抽象。每一个逻辑的实现都是由原子逻辑组成的,不可分割的原子逻辑就是底层模块(一般是接口、抽象类),原子逻辑的组装就是高层模块。在Java中,抽象就是指接口或抽象类,两者都不能被实例化。细节就是实现类,实现接口或者继承抽象类而产生的类就是细节,可以...
2019-01-04 00:02:10
354
原创 设计模式六大原则-开放封闭原则
1、开放-封闭原则概述 开闭原则(OCP)有两个主要特征:(1)对扩展开放:模块的行为可以扩展,当应用的需求改变时,可以对模块就行扩展(2)对修改关闭:对模块进行扩展时,不必改动模块的源代码。开闭原则是面向对象设计中可复用设计的基石。2、开放-封闭原则的实现 开闭原则实现的关键-----抽象。抽象基类:把系统的所有可能的行为抽象成一个抽象底层,这个抽象底层规定出...
2019-01-03 23:19:21
383
原创 设计模式六大原则-单一职责原则
1、单一职责原则(SRP) 定义:就一个类而言,应该仅有一个引起它变化的原因。2、引入单一职责的原因 单一职责原则将不同的职责分离到单独的类中,每一个职责都是一个变化的中心。在SRP中,把职责定义为变化的原因是:当需求变化时,将通过更改职责相关的类来体现。如果一个类拥有多于一个的职责,则多个职责耦合在一起,会有多于一个原因来导致这个类发生变化。一个职责的变化可能就会影响...
2019-01-02 23:17:49
193
原创 设计模式开篇-面向对象基础回顾
前段时间一直在看设计模式,大致看了一遍,基本上是能看懂,不过看的过程中基础知识的不牢固,让我在看的过程中感觉很难受,所以这几天趁着假期,把面向对象的一些基础知识及时的补了补。感觉现在看完这些基础知识之后跟最初刚学的时候理解的更加深入,记忆也更加深刻了。于是,就想以这个为开篇,写一个设计模式的学习系列,将自己的所看所想所感通过文字的形式讲出来,一方面加深自己的印象,另一方面希望能对其他人产生一定的帮...
2019-01-02 22:31:42
139
原创 Unity3D入门篇——Transform类
position:在世界空间坐标transform的位置。成员变量localPosition:相对于父级的变换的位置。如果该变换没有父级,那么等同于Transform.position。eulerAngles:世界坐标系中的旋转(欧拉角)。localEulerAngles:相对于父级的变换旋转角度。right:世界坐标系中的右方向。(世界空间坐标变换的红
2017-02-03 16:21:30
26424
1
原创 Unity3D基础篇——聊一聊三维世界和Unity3D中常用的坐标系和
最近在看Unity的旋转变换,看着看着就发现里边有一些基础知识自己还是没彻底弄明白,于是为了扫清障碍,就跳到了基础知识的学习中(也是醉了,每次看东西只要看到不懂得就会身就不放,结果就跑偏了),废话不多说,接下来就学习下3D数学中的一个基础知识点——坐标系。一、笛卡尔坐标系一般情况下没有特殊说明笛卡尔坐标系就是指直角坐标系,但直角坐标系是笛卡尔坐标系的一种特殊情况。定义:1.每个2D
2017-01-24 15:59:00
1955
转载 Unity3d碰撞器与触发器的区别详解(rigidbody移动和charactercontroller移动区别)
转自:http://blog.csdn.net/alayeshi/article/details/48176527前提:要用collider发生碰撞的话必须是使用力来移动物体。如果只是单纯的位置移动(transform.position)使用这种方法是不行的。必须有了物理的力Rigidbody或者charactercontroller移动才可以用collider的碰撞。正文:
2017-01-15 16:53:12
1223
转载 C#学习笔记——StreamWriter、StreamReader和FileStream区别
本文主要讲解一下在文件的读取中,StreamWriter、StreamReader和FileStream分别有什么样的不同,废话少说,直接进入主题。一、StreamReader类的介绍 构造函数: StreamReader sw = new StreamReader(Stream stream); StreamReader sw = new StreamReader(s
2016-11-19 23:57:44
25994
5
转载 字符编码——ASCII,Unicode和UTF-8编码
在学习计算机知识的时候,最开始我们一定绕不开编码这个问题,我们经常听到的编码方式有:ASCII,Unicode和UTF-8编码,那么至于他们之间有什么关系?接下来,我们就将详细的向您阐述一下他们斩不断理还乱的“爱恨情仇”。1、ASCII编码我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这
2016-11-19 00:20:12
554
原创 C#学习笔记——文件系统数据
类 说明 File静态实用类,提供许多静态方法,用于移动、复制和删除文件。Directory静态实用类,提供许多静态方法,用于移动、复制和删除目录。Path实用类,用于处理路径名称。FileInfo表示磁盘上的
2016-10-30 23:18:34
1496
转载 【OpenGL】理解glClear函数
转自:http://blog.csdn.net/shuaihj/article/details/7230138OpenGL函数思考-glClear函数原型: void glClear(GLbitfield mask);参数说明: GLbitfield:可以使用 | 运算符组合不同的缓冲标志位,表明需要清除的缓冲,例如glClear(G
2016-09-21 00:18:46
3486
转载 【OpenGL】理解GL_TRIANGLE_STRIP等绘制三角形序列的三种方式
转自:http://blog.csdn.net/xiajun07061225/article/details/7455283GL_TRIANGLE_STRIP绘制三角形方式很多时候令人疑惑,在这里对其运作机理进行解释。一般情况下有三种绘制一系列三角形的方式,分别是GL_TRIANGLES、GL_TRIANGLE_STRIP和GL_TRIANGLE_FAN。如下图所示:
2016-09-21 00:12:03
1523
转载 Unity5.0 EventSystem事件系统的详细说明
转载自:http://www.manew.com/blog-56596-2917.html unity5.0开发了新的UI系统UGUI,附带的事件系统EventSystem不仅可以用于UI,对于场景中的对象也同样适用。网络上有很多使用说明,但是仅仅是怎么用而已……这篇文章是我翻了无数遍官方手册整理出来的,包括自己的理解,还有官方文档的传送门,也许你会有兴趣。一、Event
2016-08-05 15:10:39
17398
2
原创 Unity插件——EasyTouch的使用
对于移动平台上的RPG类的游戏,我们常用虚拟摇杆来控制人物角色的行走和一些行为,那么今天我将对我前段时间学习EasyTouch这个插件制作摇杆做一下总结。当然网上有很多关于EasyTouch的教程,我这里只是对自己的学习做一个备忘录。1、以下是EasyTouch插件的使用步骤:1.import“EasyTouch”资源包2.创建空物体,命名为EasyTouch(当然你也可以
2016-08-01 17:32:35
4787
2
转载 Unity3D之第一人称第三人称角色控制组件修改C#版本
转自: 之前MOMO在 Unity3D研究院之角色控制器组件研究(二十二)文章中向大家介绍了角色控制器组件。默认系统提供了JavaScript脚本的支持,可是我们还是喜欢用C#来编写脚本,本篇文章MOMO将把角色控制器的所有脚本全部改成C#语言。方便自己也方便大家学习,哇咔咔。首先,我们将角色控制器包引入工程中。如下图所示,默认提供的脚本除了MouseLook以外其它的都是JS脚本,本篇文
2016-08-01 16:48:24
3555
转载 Unity3D之鼠标控制角色移动与奔跑示例
转自:雨松MOMO 2012年05月11日 于 雨松MOMO程序研究院 发表最新补充。 一般在做鼠标选择时是从摄像机向目标点发送一条射线,然后取得射线与对象相交的点来计算3D目标点。后来在开发中发现了一个问题(射线被别的对象挡住了),就是如果主角的前面有别的游戏对象挡着。此时如果使用射线的原理,鼠标选择被档的对象,这样主角就会向被当的对象的方向行走。为了解决这个问题
2016-08-01 16:19:46
7320
1
转载 Unity3D之与根据动态的两个轨迹点绘制面详解
转自:雨松MOMO 2012年05月06日 于 雨松MOMO程序研究院 发表大家应该知道3D世界中任何的面都是由三角形绘制完成的,因为任何无规则的集合图形都可以由三角形来组成。比如四边形,无论是正四边形还是无规则四边形都可以由两个三角形拼接而成。结合本文的标题大家仔细想想,如果需要绘制一个动态无规则面其实只需要得到动态的两个轨迹点即可,那么结合下面的图片大家仔细在想想。(点
2016-08-01 16:09:49
3275
转载 Unity3D之游戏对象的访问绘制线与绘制面详解
转自: 雨松MOMO 2012年05月01日 于 雨松MOMO程序研究院 发表一眨眼学习Unity3D 也有一段时间了,基本已经拿下了这套游戏引擎,回过头来想想以前写的RPG 游戏引擎,越来越发现以前写的就是垃圾。人果然是要不断学习与不断进步,好好学习,天天向上。哇咔咔~ 加油!!最近做一个项目须要去绘制线与绘制面,那么把这两天的学习笔记整理一下,一是给自己留作
2016-08-01 15:56:33
1611
原创 Lua5.3——C API函数
这里按字母次序列出了所有C API中的函数和类型。每个函数都有一个这样的提示:[-o, +p, x] 对于第一个域,o,指的是该函数会从栈上弹出多少个元素。第二个域,p,指该函数会将多少个元素压栈。(所有函数都会在弹出参数后再把结果压栈。) x|y 这种形式的域表示该函数根据具体情况可能压入(或弹出) x 或 y 个元素;问号 '?' 表示 我们无法仅通过参数来了解该函数会弹出/压入多少元素 (
2016-07-18 18:00:44
10619
2
原创 Unity3D入门篇——Quaternion类
1、Quaternion.Angle(Quaternion a, Quaternion b)计算两个旋转之间的夹角。与Vector3.Angle()作用是一样的2、Quaternion.AngleAxis(float angle, Vector3 axis) 将物体绕axis旋转angle度 例:transform.rotation = Quaternion.AngleA
2016-07-10 23:13:16
12208
2
原创 新的起点,新的开始——我又回来了
呃~真的不知道说什么好,翻看自己上次最后一篇博客的发布时间,距离今天已经过去一年零3个月了,刚刚是10号,真巧。回顾过去我消失的这一年, 发生了太多的事情了,ACM退役、实习、毕业、正式工作等等,说了这么多事情,其实都是借口,我之所以一年多时间没管过我的博客,就一个字——懒,我是真的很懒的一个人,但是我不想继续这样下去,我怀念当初打比赛的日子,忙碌而充实,有目标,但是现在忽然觉得自己目标不明确了。
2016-07-10 22:58:59
417
1
原创 2014 UESTC Training for Data Structures——J 方师傅的01串
解题思路:利用字典树,用节点记录每个字符出现的次数,然后乘以长度就是N个字符串的最大公共前缀。详见代码。Code:#include #include #include using namespace std;int maxn = -1;struct Node{ Node *Lefts;//0作为左孩子 Node *Rights;//1作为右孩子 int da
2015-04-10 20:53:09
516
原创 2014 UESTC Training for Data Structures—— E - 休生伤杜景死惊开
解题思路:树状数组。假设x[i]是数值为i的数的个数,所以求的比q[i]小的数就有x[i-1]+x[i-2]+…..+x[2]+x[1],于是就可以用树状数组来写了,从头到尾扫一遍,对每个数都算一下前面比他小的数的个数即x[q[i]-1]+x[q[i]-2]+…….x[2]+x[1],然后从后往前扫一遍,对每个数计算后面比他小的数的数量。然后相同位置计算得到的两个数相乘,再求和就可以了。详见代码:
2015-04-08 22:20:59
700
原创 The 9th UESTC Programming Contest Final——Easy Problem
题意:求所给公式ans的最大值。 n1 n2 n1 n2解题思路:由于n1+n2
2015-04-02 21:31:40
660
原创 UESTC 838 —— 母仪天下(树状数组模板)
树状数组:1、Add(x,d):让A[x]增加d 2、query(L,R):计算区间[L,R]中所有元素的和Code:#include #include using namespace std;int C[100010],n;int lowbit(int &x){ return x&(-x);}int sum(int x){ int ret =
2015-04-01 22:59:33
494
原创 UESTC 839——东风不与周郎便(线段树区间修改模板)
解题思路:线段树区间修改,详见代码。Code:#include #include using namespace std;typedef long long LL;#define MAX 110000LL n,m;LL _Sum,_Max,_Min;struct Tree{ LL L,R; LL Sum,add,Min,Max;}trees[MAX*3];vo
2015-04-01 20:36:20
1000
转载 The 13th UESTC Programming Contest Preliminary—— F - Fabricate equation
解题思路:思路:贪心。倒着扫描,遇到0就忽略,因为对应被减数的该位也设0就好;遇到9,这个特殊,因为比如290-191=99,后面进位后,9这个位也可以使得被减数与结果的该位相同,这样的情况需要两个条件:必须后面可以进位。假如减数那位为0,不论结果为什么,都无法产生进位。第二个条件是,被减数的前一位可以借位,也就是说9这种情况完成后,即便前面遇到减数那位为0,也不能再忽略,只能当一般情况处理。一般
2015-03-31 21:53:37
490
转载 The 13th UESTC Programming Contest Preliminary——Hug the princess
题意:根据公式进行计算。解题思路:首先,自己可以通过举几个例子来验证,异或运算与与运算之和刚好等价于或运算,或者可以这样想,异或是(1,0)、(0,1),与是(1,1),合起来刚好是或。然后题目就是求两倍的或运算了。然后,每一个ai都与aj或运算(i官方题解:Code:#include #include #include using namespace std;typede
2015-03-31 20:49:06
571
原创 The 13th UESTC Programming Contest Preliminary—— L - Lovely princess
题意:有n项工作,每项工作都有一个Vi和ai,表示当你的能量大于等于Vi值时才能去做这项工作,完成后能量增加ai,且完成过程中不消耗能量。如果要完成n项工作,最小的初始能量为多少。解题思路:将所有工作按照Vi从小到大排序,依次做任务既是最优情况,记sum[i] = a1+a2+......+ai,完成所有工作所需的最小初始能力值即为ans= max(vi-sum[i-1]),详细解释为:将每次
2015-03-31 19:57:49
504
原创 The 13th UESTC Programming Contest Preliminary——AC Milan VS Juventus
题意:两队踢球,正常情况踢5场,当在5场内的某一场既能判断出输赢即可停止比赛,若5场未能分出胜负,即可加赛,每次加赛一场,当能分出胜负后即停止,现给你一个比分让你判断是否合理,合理输出yes,否则输出No。解题思路:很简单的一道签到题,详见代码。Code:#include #include #include using namespace std;int main(){
2015-03-31 19:21:04
609
原创 UESTC 576 —— Journey
题意:遍历N个点,每个点都要作为起始点进行一次遍历且每个点都要找出一个最短的遍历路程,每个点至少访问一次(即可返回遍历),输出每个点的最短路程。解题思路:由于要把 N 个点都访问一遍,因而最优解必然要经过 N-1 条(种)边,且每条(种)边至少经过一次。最优解也最多经过 N-1 条(种)边,因为经过 N-1 条(种)边时,已经把 N 个点都访问至少一遍。因而可以枚举哪条边不走,之后终点必然
2015-03-30 17:34:32
389
原创 UESTC 568 —— Battery Charging
题意:一个手机充电,第k天充电为k个单元电量,第k天用电量为k个单位电量,问从S天开始到T天结束,最多能用几天?刚开始时电量为空解题思路:首先我们要明白两点:1、以后用要花费更多的电量; 2、以后充电比现在充电要得到更多的电量。 然后思考发现:第 S 天电池没电,充完电之后剩余 S 的电量 ;第 S+1 天因为电量不够还需要充电,充完电之后剩下 2*S+1 的电量 ;第 S+
2015-03-30 17:27:19
391
转载 并查集详解
通过find函数找出该节点的根节点,通过UNION函数将两棵树合并。加入rank[N]来记录每个节点的秩(即树的高度),并按秩进行合并,可避免合并时的最糟糕情况,(树形为一条直线)通过路径压缩可以减少每次寻找根节点的次数。下面通过HDU1232(畅通工程)来进行分析:Code#include #include #include using namespace std;
2015-03-29 19:25:18
350
转载 Dijkstra算法详解
Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。 Dijkstra算法是很有代表性的最短路算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。其基本思想是,设
2015-03-29 15:55:57
867
转载 Kruskal算法详解
克鲁斯卡尔(Kruskal)算法(只与边相关)算法描述:克鲁斯卡尔算法需要对图的边进行访问,所以克鲁斯卡尔算法的时间复杂度只和边又关系,可以证明其时间复杂度为O(eloge)。算法过程:1.将图各边按照权值进行排序2.将图遍历一次,找出权值最小的边,(条件:此次找出的边不能和已加入最小生成树集合的边构成环),若符合条件,则加入最小生成树的集合中。不符合条
2015-03-29 15:52:52
1254
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人