unity之初级工程师

摘要:
副例程在MainThread中执行,每次只执行一个副例程。虽然UGUI在制作界面时只使用小图像,但最终打包时,unity只会将小图像合并到一个大图集中。Unity3D支持的图形文件格式包括PSD、TIFF、JPG、TGA、PNG、GIF、BMP、IFF和PICT。

unity之初级工程师第1张

一.值类型与引用类型

值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用,数据存储在数据堆中。值类型变量声明后,不管是否已经赋值,编译器为其分配内存。值类型的实例通常是在线程栈上分配的(静态分配)

引用类型声明时并没有为其分配堆上的内存空间。引用类型的对象总是在进程堆中分配(动态分配)。

值类型(value type):byte,short,int,long,float,double,decimal,char,bool 和 struct

引用类型:string 和 class

二.继承,封装,多态

继承可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。继承概念的实现方式有二类:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力。

封装:一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。

多态就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。

三.代码风格

重构:就是在不改变软件系统外部行为的前提下,改善它的内部结构。

在实际写代码时,组合方式一般会这样写:
A类的构造方法里创建B类的对象,也就是说,当A类的一个对象产生时,B类的对象随之产生,当A类的这个对象消亡时,它所包含的B类的对象也随之消亡

聚合方式则是这样:
A类的对象在创建时不会立即创建B类的对象,而是等待一个外界的对象传给它
传给它的这个对象不是A类创建的。

四.设计模式

六大原则:

1、开闭原则(Open Close Principle)

开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。

2、里氏代换原则(Liskov Substitution Principle)

里氏代换原则是面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

3、依赖倒转原则(Dependence Inversion Principle)

这个原则是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。

4、接口隔离原则(Interface Segregation Principle)

这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。它还有另外一个意思是:降低类之间的耦合度。由此可见,其实设计模式就是从大型软件架构出发、便于升级和维护的软件设计思想,它强调降低依赖,降低耦合

5、迪米特法则,又称最少知道原则(Demeter Principle)

最少知道原则是指:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。

6、合成复用原则(Composite Reuse Principle)

合成复用原则是指:尽量使用合成/聚合的方式,而不是使用继承。

单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

实例链接:http://www.cnblogs.com/shirln/p/8464617.html

观察者模式:当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)

参考:https://www.cnblogs.com/promise-7/archive/2012/05/14/2500759.html

推荐两本学习C#的书:C# Gang-of-Four Patterns

          Head First设计模式

unity之初级工程师第2张

1.数据结构

https://www.cnblogs.com/shirln/

2.基础算法

待续

unity之初级工程师第3张

一。脚本开发

Unity脚本生命周期:

Unity中脚本按照一定的生命周期执行

1.Awake

最早执行,在GameObejct对象的数据和状态的初始化后执行,只会触发一次。

tips:GameObject实例化到场景中后在激活的状态下才会初始化,如果GameObject从来未激活,它的脚本上的Awake永远不会被调用。

即时触发,GameObject第一次active的时候调用。

2.Start

在脚本第一次调用Update之前调用,只会触发一次。

3.OnEnable

在脚本状态由disabled变为enabled状态是触发一次,Unity内部可能将脚本初始置为diabled,所以如果我们实例化一个激活的GameObject,并且在挂上一个enabled了的脚本后把它加入场景会调用一次OnEnable,并且早于Start。

4.OnDisable

在脚本由enabled状态变为disabled状态的时候会调用。

tips:OnEnable和OnDisable事件的触发是即时的,并且这两个事件是综合考虑GameObject的active状态和脚本的enabled状态的。所以不要在OnEnable里面把脚本设置为disabled同时在OnDisable中把脚本设置为enabled,会导致死循环!!!

5.Update

在每一帧调用,用于实现各种行为逻辑

6.LateUpdate

在每一帧调用,但是是在Update之后触发。常用的一种情况是相机跟随移动角色:角色移动逻辑在Update里面实现,相机跟随逻辑在LateUpdate里面实现。

7.OnDestroy

在组件被销毁时调用,只有GameObject被激活过才会触发。

8.协程(Coroutine)和线程(Threads)是两个完全不同的概念。 线程是完全异步的,在多核CPU上可以做到真正的并行。Coroutines都在MainThread中执行,且每个时刻只有一个Coroutine在执行。

9。推荐使用Destroy代替DestroyImmediate

原因是DestroyImmediate是立即销毁,立即释放资源,做这个操作的时候,会消耗很多时间的,影响主线程运行
Destroy是异步销毁,一般在下一帧就销毁了,不会影响主线程的运行。

二。2D

图集

UGUI的Atlas和NGUI的Atlas的区别:NGUI是必须先打出图集然后才能开始做界面。而UGUI做界面的时候只用小图,而在最终打包的时候unity才会把小图合并在一张大的图集里面。

五。Unity3D支持的图形文件格式有 PSD, TIFF, JPG, TGA, PNG, GIF, BMP, IFF, PICT。

一般来说3D游戏我们压缩贴图的时候会把贴图分为UI贴图和场景模型贴图来考虑,主要是因为有多重采样的缘故。3D游戏一般来说都是受摄像机远近大小改变而采取不同的采样大小,假设不设置多重纹理采样的话,在远处会有非常多的白色噪点。

2D游戏的话,所有都不需要勾选多重采样,具有3D性质的贴图,我们都需要勾选上GENERATE MIP MAPS,这样会使贴图大小增加25%这样。

 三。物理

四。插件使用

 unity之初级工程师第4张

经典面试题1

经典面试题2

经典面试题3

经典面试题4

unity之初级工程师第5张

免责声明:文章转载自《unity之初级工程师》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇angular6项目从零开始微信小程序,前端大梦想(三)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C#基础知识

C#基础 1、面向对象、面向接口、面向方向编程的区别: 面向对象:强调对具有相同行为和属性事物的封装,更注重封装的完整性和功能的完整性 面向接口:定义要实现某类功能要实现的统一规范,而具体实现过程由实现该接口的类型决定 面向方面:主要提供与业务逻辑无关的操作。比如系统中多个地方要使用到的文件上传功能,可以使用面向方向的思想在所有上传文件之前对文件的大小、格...

Unity 切割导出精灵

Unity中经常使用到精灵,尤其是2D游戏中制作动画等!今天我们就学习下精灵的切割和导出吧! 废话不多说,先建议空的工程。 1,打开Unity建工程。 2 导入素材进行资源分类,工程不在于大小,这是我们对待它的态度! 3.开始分割精灵,三步走! 编辑精灵. 开始分割精灵 Apply一下,看下分割的精灵,0-9共9个。 贴精灵导出代码: using...

AssetPostprocessor.OnPreprocessModel

今天对工程中的模型做一些统一设置, 然后发现一个问题, 就是修改了设置点Apply之后, 又会被改回默认设置. 最后搜了一下, 处理方案是使用assetImport的userData进行判断. 参考文章: <Manage Default Asset Import Settings in Unity> http://www.cliffordroc...

Unity3d监听手机暂停与退出事件

做移动互联网类型的开放,很多情况得考虑移动设备的暂停与退出时,做某些数据操作或UI。 1,退出事件,Unity3d,InPut就包含了: Input.GetKey(KeyCode.Escape) 、 Input.GetKey(KeyCode.Home) 、Input.GetKey(KeyCode.Menu); 2,暂停事件,Unity3d的 OnAppli...

Unity小知识点大全(一)

原帖地址:https://zhuanlan.zhihu.com/p/54763553 1. 高亮选择 在Scene面板右上角的Gizmo下拉列表中,可以通过设置Selection Outline选项决定是否在选中物体时显示边缘高亮的标识。 2.Pixel Perfect Camera 在摄像机上挂载Pixel Perfect Camera组件能够使2D像...

【Unity3D】实现太阳系

    实践要求:写一个程序,实现一个完整的太阳系,其他星球围绕太阳的转速必须不一样,并且不再一个法平面内。     法平面是指过空间曲线的切点,且与切线垂直的平面。要求不在一个法平面内,则在保证所有行星以及太阳在一条轴上时,另外两条轴的比例不相同即可。公转速度在RotateAround参数里面设置。如:     这个程序在课堂程序的基础上完成,使用了预...