自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 收藏
  • 关注

原创 C#遍历和Lua遍历for的一点区别

这两个语言的for循环里面还是有点不同,需要注意。首先C#的for循环,每次循环都会计算一次count部分,而lua的for循环只计算一次C#部分:namespace CSharpTest{ class Program { static void Main(string[] args) { MyIterator iterator = new MyIterator(); for(int i = 0;

2020-05-25 10:20:23 351

原创 协程、线程、进程

前言: 协程、线程和进程,可以说是面试必问,开发必接触的问题了,有必要系统性地认识和理解它们。协程:游戏开发中,协程一般分为2种,一种是Unity的协程,一种是Lua的协程。Unity的协程可以参考我之前写的一篇文章Unity的协程。主要实现方式是利用C#的IEnumerator和Unity的Update()函数,在Unity的主线程中去检测和执行协程。Lua协程的特点是一个L...

2020-01-20 17:54:49 355

原创 状态机和行为树

对游戏NPC的行为控制一般有2种,一种是状态机,一种是行为树。状态机:Unity对人物动画的控制是基于状态机的,如下图:可以看到,每个状态除了包含自身的状态行为外,还需要和其他的状态打交道,需要输入状态机之间切换的条件。因为这一点,导致增加状态会使得状态机越来越复杂。状态机是一种网状结构,耦合性很大。行为树:图片源自:https://blog.csdn.net/goo...

2020-01-19 17:01:36 14866

原创 四元数解析

四元数对游戏开发来说是一个绕不过的知识点。四元数之所以比欧拉角好用,是因为四元数没有万向节死锁,并且可以很方便的对旋转轴增量旋转,计算量较小。简单总结一下:四元数当然由四个部分组成,一般描述为: q = ( x, y, z, w ),其中 x, y, z是复数,具体是:q = { xi,yj,zk, w}四元数用来表示绕着某个轴旋转,q里面的xyz部分表示旋转轴,w表示旋转的角度。复数...

2020-01-19 13:26:10 2171

原创 Shader的几何数学、线性代数

要会写Shader,需要掌握一些基本的空间知识,比如空间坐标,矢量,线性代数等。下面介绍一些相关知识。坐标系: 常见的坐标系分为二维坐标系和三维坐标系,二维坐标系比较容易理解,它就是我们初中就已经接触过的X-Y轴坐标系,相信大家都已经有所认识,不再赘述。三维坐标系比二维坐标系多了Z轴,也多了一些特性。三维坐标系可以分为左手笛卡尔坐标系和右手笛卡尔坐标系。之所以存在2种坐标系,是因为两...

2020-01-19 00:57:56 624

原创 Unity Shader的ShaderLab语法

Shader简要概括:1、Shader在可编程渲染流水线中,所处的位置是顶点着色器和片元着色器,这两个部分是高度可编程的。2、Unity的ShaderLab是Untiy特有的着色器编程语言,他是对Cg/HLSL/的一层封装,是为了简化编程而诞生的。3、Shader脚本和Material密切相关,和Material一起作用在GameObject上。4、Unity的着色器包括2种类型,...

2020-01-18 17:10:48 362

原创 Unity渲染流水线

今天过年回家了,不过要准备面试,认真学习下《Shader入门精要》因为里面不单涉及到shader的知识,还有一些渲染的知识,对我来说很有帮助。渲染流水线: 渲染流水线的目的是把场景从3维空间转化到2维空间,并最终在屏幕上显示的过程。之所以称之为流水线,是因为渲染有并行性,每个渲染图元可以并行处理,相互之间没有必然的前后顺序。渲染流水线的过程分为:应用阶段,几何阶段,光栅化阶段。应...

2020-01-18 15:21:05 314

原创 滑动窗口

百度百科总结的挺好,用自己的语言记录一下。滑动窗口:为了解决网络数据传输的拥塞情况,对发送端和接收端的收发过程进行控制,例如确定收发窗口的大小,确定发送时机(接收端的确认反馈),丢包重发机制。为什么说它是滑动的,这是因为缓存区的数据帧传输是按照序列顺序进行发送的,前面序列的数据发送完后发送后面序列的数据,并写入新的数据到后面序列。看起来就跟滑动一样。窗口:窗口可以理解为待发送(接收)区的缓...

2020-01-16 15:03:50 227

原创 Unity 欧拉角万向节锁的原理

网上文章很多,有些写的很详细,但是我个人理解起来有不是很顺畅,把几个重要的知识点整理一下欧拉角:欧拉角用于控制物体的旋转角度,在Unity中欧拉角的表示就是一个Vector3,例如 Vector3 v3 = new Vector3(30,30,30) Unity的欧拉角旋转顺序是 Z-X-Y,这个旋转顺序在不同的软件,行业有所不同,没有一个全球统一标准。旋转顺序:同样的输入值,...

2020-01-16 11:12:22 818

原创 简单理解Unity UGUI Anchors

简单快速理解Anchors:1 Anchors翻译为锚点,但其实它不是一个点,而是拥有四个点的一个矩形,当这四个点在一起的时候,就可以看成一个点2 每个UI元素都有Width和Height,所以每个UI元素其实都占用一块矩形空间3 Anchors是描述子UI相对于父UI的位置关系的一种方式4Anchors是父对象上的4个点,子物体UI的4个角和父对象UI的4个点的相对位置保持不变...

2020-01-15 14:05:19 561

原创 Unity 的 UGUI Pivot学习

Pivot很常见,也很简单,有时候简单到让人忽视,再简单的东西也希望自己能够熟知,而不是一知半解。Pivot就是中心点的意思,在UGUI里面是长这样的:一个UI控件是一个矩形,我们先建立UI的坐标模型:以左下角为原点(0,0),按照顺时针的方向设矩形的四个角坐标为(x1y1, x1y2, x2y2, x2y1)。现在我门可以计算Pivot.x = 0.5时,x的值。x = (x...

2020-01-14 17:26:27 1269

原创 Linux部署Skynet入门(CentOS7)

最近买了个阿里云,稍微看了下Skynet,简单说下部署过程,适合跟我一样的新手。先创建一个文件夹,比如“server”。进入这个文件夹 :#cd /server安装git: #yum install git安装autoconf:#yum install autoconf安装readlinde:#yum install readline-devel前面这些如果已经安装就不用继续安...

2019-11-05 10:08:27 569

原创 设计模式之——观察者模式

跳转到==>设计模式汇总观察者模式1 这个太常用了2 有一些关注的人(粉丝),一个被关注的人(明星),明星有一个存储粉丝的容器,被明星发微博时,通知所有的粉丝,然后粉丝执行他们的方法(转发,点赞) public class Fan { public void Subscribe(Star s) { s.Add...

2019-10-21 15:53:39 122

原创 C++类的两种实例方式

C++类的实例有两种,C#只有一种new的方式,有点不同。先写一个简单的类:class Apple{public: int weight;};方式一:#include <iostream>#include "Apple.h"using namespace std;void main(){ Apple apple; apple.w...

2019-10-09 16:42:19 467

原创 Unity接入ShareSDK的操作详解(Demo)

最近一星期在了解Android接入SDK的过程,之前用Android Studio生成一个简单的jar来实现Unity和Android的相互操作,今天尝试接了下ShareSDK的接入,比预想的容易很多,详细记录一下,也希望对大家有所帮助。环境:Unity2018.2.41夜深模拟器AndroidSDK 29JDKandroid-ndk-r13b一 新建Unity项目...

2019-09-19 16:42:06 1749 1

原创 Lua的排序算法——插入排序

a = {1,3,5,2,6,8,10,3,6,20,12}--插入排序:从前面往后增1截取数组进行排序,新增的值进行插入检测,从后遍历与上一位对比,小则调换位置local function ChaRuPaiXu(arr) local length = #arr local i = 1 local j = 1 for i = 2, length do for j = i, 2,...

2019-09-09 13:52:46 286

原创 Lua的排序算法——快速排序

a = {1,3,5,2,6,8,10,3,6,20}--快速排序(以数组最左边的值为基准,比它小的放左边,比它大的放右边,然后再对左右两边的数组进行同样的操作,直到细分排列完成)local function KuaiSuPaiXu(arr, startIndex, endIndex) if startIndex >= endIndex then return end l...

2019-09-09 11:20:44 1522 1

原创 Lua的排序算法——选择排序

a = {1,3,5,2,6,8,10,3,6,20}--选择排序(从前到后,以当前位置的值为最小值,然后不断比较后面的值,取最小值进行替换)local function XuanZe(t) local count = #a local temp = 0 local minIndex = 0 for i = 1, count do temp = a[i] minIndex...

2019-09-09 11:18:53 375

原创 Lua的排序算法——冒泡排序

最近回头看了下排序算法,用lua实现,随手记录一下a = {1,3,5,2,6,8,10,3,6,20}--冒泡排序(从头到尾排序,相邻两个互相对比)local function MaoPao(t, isIncrease) local count = #a for j = 1, count -1 do for i = 1, count - 1 do local pre ...

2019-09-09 11:14:59 739

原创 Unity——EditorWindow的一些常用方法

合理使用Unity的Editor编写工具,可以提高工作效率,平时开发过程中,一些比较频繁,复杂,易出错的操作,可以通过编写工具来简化操作。下面介绍EditorWindow里面常用的API1 void OnDestroy(),类似MonoBehaviour,EditorWindow里面的OnDestroy()会在工具窗口关闭时调用,如果窗口关闭时,你想对之前的操作进行清理或恢复,那么可以写在这个...

2019-08-09 14:27:14 2176

原创 编写Unity的Editor工具提交Svn脚本

开发过程中少不了要提交一些代码,文件,虽然操作过程简单,但是容易遗漏提交文件,写个editor工具可以减少文件漏提交的情况。 提交到SVN的代码很简单,不过有一个前提,就是要先配置SVN的环境变量。代码如下:public class SvnTool : EditorWindow{ [MenuItem("GameTools/Svn工具")] public stati...

2019-08-09 13:50:42 391

原创 设计模式之——备忘录模式

跳转到==>设计模式汇总备忘录模式1 怎么看完觉得没什么东西可说的,可能讲的不是新奇的结构,思路,只是有这么一种需求,把它给说出来。2 备忘录的目的是可以备份数据,需要的时候可以找回之前的版本的内容。所以它需要一个数据类,一个存储数据的结构,一个获得和保存的方法 public class StateInfo { public int coin; ...

2019-08-01 09:15:50 151

原创 设计模式之——中介者模式

跳转到==>设计模式汇总中介者模式1 目的是把对象之间网状的关系,转化为星状的关系。嗯,我还是觉得奇怪,这种提出来的意义是什么,一般好像就是这么处理。网上的聊天室例子并不合适,因为它是直接A发消息给大厅,而不是A发消息给B,本来就跟对象之间没有关系,所以本质就是星状的关系,没有任何变化。2 我觉得这个模式的使用条件是,对象之间可以不是直接联系。比如A1要租房,B1,B2,B3是房东,...

2019-08-01 09:15:00 129

原创 设计模式之——迭代器模式

跳转到==>设计模式汇总迭代器模式1 这个模式确实很常见,需要熟悉,C#里面经常会看到相关的结构。一个迭代结构 Iterator,Iterator里面有moveNext()的方法。一个包含迭代结构的类,该类自己存储要遍历迭代的数据,在自己内部实现Iterator的继承结构,并且有一个返回该继承Iterator类实例的方法 GetIterator()。 public inte...

2019-08-01 09:13:11 109

原创 设计模式之——解释器模式

跳转到==>设计模式汇总解释器模式1 它的意思是解释,不过没看出来和解释有什么太大的关联。结构的特点是,一些继承类的继承方法,通过传入的其他继承类来实现。一个解释基类,一些继承类(供其他使用),一些继承类(使用其他继承类)2 自己的案例没有写完,, public interface Expression { bool Interpret(strin...

2019-08-01 09:11:39 125

原创 设计模式之——命令模式

跳转到==>设计模式汇总命令模式1 嗯,,耗了很多时间在这里,其实也没多复杂,就是不太清楚目的。总的来说是这样的:有一个命令基类,然后其他的命令继承,继承的命令里面会存一个主体,然后命令的基类方法的实现是依靠存入的主体去实现。2 我们常规的处理命令的思路是,一个命令基类,然后继承命令去分别添加不同命令。命令模式的思路是,继承的命令不直接重写命令方法,而是由存入的类去重写命令方法。隔了...

2019-08-01 09:09:26 119

原创 设计模式之——责任链模式

跳转到==>设计模式汇总责任链模式(属于行为型模式)1 很好理解,就是一个东西传下来,遇到合适的处理对象,才进行处理2 重点:有多个处理者,这些处理者继承同一类;每个处理者有它的下一级处理者;当然每个的下一级是串联在一起的 public class Mobile { public Mobile nextMobile; public ...

2019-08-01 09:07:45 138

原创 设计模式之——代理模式

跳转到==>设计模式汇总代理模式1 顾名思义,就是有代理,中介存在。例如:喝醉了,不能开车(不想和不能改动目标是重点,如果让车自己动,就改动了目标),找人代理开车的工作,代理人会开车,并且他有车(有车是重点)2 二个重点:代理者和对象继承同个接口(这个地方非常怪异);代理者拥有对象;3 目的是不想或不能直接访问或修改对象4 与装饰器有点像,似乎都是为了不改动对象而采取的方案...

2019-08-01 09:04:13 108

原创 设计模式之——享元模式

跳转到==>设计模式汇总享元模式1 这个名字有点奇怪,解释一下:一个对象池,使用者可以从对象池里面取出对象(元),取的过程中,如果对象池里面没有要的东西,则new一个添加进对象池(享)。2 这里有两个重点,一个是对象的抽象部分由对象池提供,对象的具体部分由使用者另外定义。另一个是如果当前对象池没有要的对象,则添加进去。 public abstract class Hero...

2019-08-01 09:02:16 113

原创 设计模式之——外观模式

跳转到==>设计模式汇总外观模式1 外观模式也比较简单,基本的目标是:让调用者使用简单。直接给出调用者一些方法,调用者直接调用方法就可以了。类似于很多的Util类,Tools类。 public class Cpu { public void Start() { Console.WriteLine("CPU St...

2019-08-01 08:59:39 114

原创 设计模式之——装饰器模式

跳转到==>设计模式汇总装饰器模式1 怎么回事,装饰器模式的内容,怎么跟桥接模式一模一样~2 重新回去梳理,设计模式针对的是目的,装饰器的目的是为了修饰对象,桥接是为了解耦 public abstract class Fruit { public abstract int GetPrice(); } public class ...

2019-08-01 08:58:23 117

原创 设计模式之——组合模式

跳转到==>设计模式汇总组合模式1组合模式是一个树状结构,根节点有子节点,子节点又可以作为根节点,有它自己的子节点.2 应用场景的话,比如一个公司.员工作为结点,那么 总经理包含多名副经理和助手,副经理包含多名部长,部长包含多名科长\副科长等3 重点是,要组合的模型类里面,它含有一个类型为自己的list变量.一层套一层的感觉 public class YanghuiNu...

2019-07-31 18:27:21 192

原创 设计模式之——过滤器模式

跳转到==>设计模式汇总过滤器模式1 从数据里面找出想要的某些数据,逻辑相对简单,也很常见,没什么好说的。2 这里面唯一的一点东西是,得出的数据进行并/或运算.也没啥,, public abstract class Vehicle { public abstract Scope UseScope(); public enum Sc...

2019-07-31 18:25:40 196

原创 设计模式之——桥接模式

跳转到==>设计模式汇总桥接模式1 怎么这个看了也觉得怪怪的。看来没有实际去使用过,去设计过框架,会觉得奇怪。2 有一个点很重要。一般的方式是,多种类型物品,提取出一个抽象,然后继承。然而桥接模式就不是这样做,它是写一个接口A作为桥接,然后写另外一个抽象类B去调用这个接口A,然后具体类C继承于B再由C调用A接口。这个时候,如果你对C调用A的方法进行改动,那么就相当于对A进行改动,这种...

2019-07-31 18:22:40 191

原创 设计模式之——适配器模式

跳转到==>设计模式汇总适配器模式1 为什么看完总觉得怪怪的。适配器使用的情况是,之前写的一套流程,只有一种数据结构,和一种处理方法。后来有了另外的数据结构,另外的数据结构有自己的处理方法,这个时候想要在同一个调用类里面调用同一个方法,该方法使用另外的数据结构,仍能正常运行。我认为好像就是多了一些if判断罢了啊,,,如果是数据结构1,则执行方法1,如果是数据结构2,则执行方法2,2 ...

2019-07-31 18:18:13 169

原创 设计模式之——原型模式

跳转到==>设计模式汇总原型模式1 有一些对象比较难获取,如果每次都从源位置进行获取(比如配置表,数据库),则会耗费大量的性能。此时就需要把这些对象先保存起来,然后再复制出对象。2 总的来说2个关注点:(1)保存对象的缓存结构,比如hashtable。(2)复制对象的方法3 奇怪了,感觉这个模式的内容太简单,简单到几乎只需要用到2个方法就完成这个模式,, public ...

2019-07-31 18:15:39 187

原创 设计模式之——建造者模式

跳转到==>设计模式汇总建造者模式1 这个模式部分用到工厂模式,不同之处在于,它不止单单满足于生成某种单一的产品,它还要将多个产品组合在一起,成为一个组合。2 好处是,将一个复杂的组合结构分解出来,每个分解出来的部分单独进行处理,那么这一部分就变得很简单。然后再写一些搭配方法得到你想要的组合。搭配方法有很多种。3 所以这种模式的主要用法是:给多个人去写产品,产品有一定的约束,然后再...

2019-07-31 18:13:59 204

原创 设计模式之——单例模式

跳转到==>设计模式汇总单例模式1 单例模式有几种说法,懒汉模式,饿汉模式;线程安全和线程不安全。 1.1 懒汉模式:是指等到调用单例方法GetInstance()的时候才去检查是否已生成对象,如果_instance为null则new一个对象,如果不为null,则直接返回_instance。这种方式的优点是你可能不会用到该实例,而只用到它的静态方法,那么这个时候内存就还没有ne...

2019-07-31 18:07:59 162

原创 设计模式之——抽象工厂模式

跳转到==>设计模式汇总抽象工厂模式1 抽象工厂模式和工厂模式有相同的地方,有多出来的地方。相同的是他们的主要目的是获得产品,以及使用该产品的方法。不同的是,抽象工厂模式在抽象出产品的基础上,再抽象出工厂。这使得调用者可以很方便的得到他要的产品和产品的特性。但是缺点也很大,管理工厂需要耗费很多精力,整个结构显得比较庞大,臃肿。需要熟练这种模式才能比较好的运用和理解。2 抽象工厂是多个...

2019-07-31 18:03:09 179

原创 设计模式之——简单工厂模式

跳转到==>设计模式汇总简单工厂模式1 使用情景:多种对象,这些对象都有相同的特性,所以他们来自同个类或接口,他们有相同名字的方法。这些对象根据自己的特性,重写这个方法,体现出个体在种族内的差异性。 工厂根据你指定的参数,生成对应的对象,然后就可以调用该对象的相同方法。2 多个同种类型的产品,一个工厂。根据产品的名字,通过工厂得到产品。 public class ...

2019-07-31 17:56:01 1258 2

空空如也

空空如也

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

TA关注的人

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