1.使用unity的MovieTexture播放视频在物体上,对象只能在电脑上面试
2.移动端播放全屏视频 Handheld.PlayFullScreenMovie(),视频文件必须放置在StreamingAssets文件夹下编程
3.Unity的其余特殊文件夹??json
4.Unity实例化物体(destObject,position,rotation,parent)和(destObject,position,rotation),前者会先让预制物体实例化为parent的子物体,而且使其scale值乘以父物体的scale值,再调整其位置,这样得出的结果事宜相对坐标,每每会发生预料以外。后一种为直接实例化,没有父子依赖关系,也不调整其scale值,能够后面添加父子关系,这样的结果更好。通常状况下,最好將预制物体的坐标设为(0,0,0)。设计模式
5.使用 transform.parent.TransformPoint(transform.localPosition)来进行坐标转换,无论有几层父子关系,都以其最高层来转化。网络
6.今天弄了一天仍是没解决一个问题:
我要在下图模型如图选中的小圆球的position位置实例化一个饼状的物体并设置该物体为小球的子物体,小球为该模型的骨骼的子物体,饼状预制物体的坐标为(0,0,0),脚本是依附在小球上的
多线程
代码以下
架构
实例化后的结构以下(此处我把视图放到模型里面能够看到饼状物体)
框架
为何个人预制物体没法实例化到小圆球的坐标位置,求解求解求解,有人遇到过此问题求解,我快崩溃了tcp
利用一个capsule做为小球的子物体来代替该小球就可让物体实例化在capsule的位置,这说明模型自带的子物体的位置真的不能做为一个预制物体的位置参考,不然会出错,最有效的方式是创建一个unity物体,而后调整位置,并为该物体的子物体,让unity物体代替该物体的定位功能。编辑器
7.上面主要出现的问题的缘由是,物体实例化子物体参考的是自身的pivot坐标,center坐标是以colider组件来定义的坐标,物体的移动,转向,世界坐标,子物体实例化位置,都是以pivot来作参考的,pivot是物体网格渲染的真实坐标。而且若是物体没有父物体,那么检视面板显示的是pivot世界坐标,若是有父物体,那么显示的是相对坐标,在脚本里相对坐标能够用localposition得到。
8.修改某些物体的pivot坐标的方法,因为pivot是在建模的时候固定的,因此没法真实修改,可是可让此物体成为某个空物体的子物体,让后调节它们的相对位置,最后让这个空物体代替原来的物体。可是对于某些动画模型来讲最好不要这样作,最好是用其余模型工具实际修改。
9.Destroy函数会在一帧的结尾执行。
7.MonoBehaviour类中的鼠标事件如OnMouseDown只对空间中的物体有效,对UGUI无效,对UGUI须要新的事件系统接口新的:EvenSystem。
8.对于拖拽事件,OnPointerDown不能代替OnBeginDrag,OnPointerClick不能代替OnEndDrag。不然会发生没法复位的Bug。
9.模型的Animation下的Curves能够添加参数曲线,若要使用此参数,可在animator组件中添加和此参数同名的参数,可是参数值以animation下的值为准。
10.脚本组件下面有start()函数或者update函数时,在检视面板中才有勾选框。
7.预制物体的脚本GameObject成员变量的值只能是预制物体对象,不能引用场景中的对象。
8.网格碰撞器的面数必须小于256面。
9.若是物体A与物体B发生碰撞,C是物体A的子物体,而且物体C没有Rigidbody组件,A和B都有Rigidbody组件,而且碰撞点在C,那么发生碰撞的是A与B的Rigidbody。可是若是C有Rigidbody组件,那么发生碰撞的就是C与B。也就是说碰撞的是两个逻辑上最近的Rigidbody。
10.mesh filter定义了物体的形状,mesh render定义了物体的渲染显示。
11.拖拽精灵子图到空物体建立精灵动画时有可能没有弹出动画建立窗口,这多是软件反应延迟,可删除刚建立的没用的子物体,再次拖拽。
7. Animator Controller 与 Animator override Controller的关系相似于父类虚函数与子类重写函数的关系,能够为两个形状不一样,可是动画转换条件相同的,只是动画不一样的物体其中一个添加Animator override Controller,而后重用上一个的Animator Controller,而后替换相应的动画便可,当此类物体的数量不少时,用这种方式能够节省时间。
8.
layer主要经过光线投射来选择性地忽略碰撞器,或者添加碰撞功能。而sorting layer就是一个渲染层级的顺序的控制。
9.
[Serializable]可使其定义的变量在inspector面板下显示。[HideInspector]用在public变量前面表示即便是公共变量,也不会在Inspector中显示。
10.
Animator中Trigger类型的参数,设置其值以后当即就会自动恢复原来的值,用于设置某些攻击技能状态颇有效。
7.OnLevelWasLoaded(int index),在一个场景加载完成后调用。
8.Mathf.Lerp(float a,float b,float t)函数用于插值运算,即让a变化到b,变化插值为t。即a=a*(1-t)+b*t;此方法有2D和3D的重载。
9.Instantiate(obj,position,rotation)函数用于实例化物体,当rotation为Quaternion.identity时表示使用obj原来的旋转。
10.重复和延迟执行的方法:
Invoke(methodName: string, time: float): void;
用于调用并延迟执行某个方法
methodName要执行的方法名称,time延迟多久以后执行。
InvokeRepeating(methodName: string, time: float, repeatRate: float): void;
用于调用并延迟执行某个方法,以后重复执行该方法
Methodname方法名称,time多久以后执行,repeatRate执行间隔
11.广播消息:BroadcastMessage(“MethodName”):用于调用全部子物体的MethodName方法。
12.协同程序的使用:
(1)什么是协调程序
unity协程是一个能暂停执行,暂停后当即返回,直到中断指令完成后继续执行的函数。
它相似一个子线程单独出来处理一些问题,性能开销较小,可是他在一个MonoBehaviour提供的主线程里只能有一个处于运行状态的协程。
(2)协同程序的特色
一、协程在中断指令(YieldInstruction)产生时暂停执行
二、协程一暂停执行便当即返回 //中断协程后返回主函数,暂停结束后继续执行协程剩余的函数。
三、中断指令完成后从中断指令的下一行继续执行
四、同一时刻、一个脚本实例中能够有多个暂停的协程,但只有一个运行着的协程
五、函数体所有执行完后,协程结束
六、协程能够很好的控制跨越必定帧数后执行的行为
七、协程在性能上、相比于通常函数几乎没有更多的开销
八、协同程序都是在主程序中运行,而且会在每一帧中检测你yield后面的条件是否知足,若知足会继续执行。
好比当一个状态函数到达某一个状态时须要执行某个程序,可是又不能影响其余函数的执行,此时可使用协程序另外开辟一个线程来执行,提升运行速度。
32.场景中不要直接拖拽引用切换场景不销毁的物体,由于当场景再次切换回来的时候,引用的物体将再也不是原来的物体,会形成某些调用丢失。
33.关于游戏暂停:使用Time.timeScale。其中Time.timeScale将会影响fixedUpdate函数,而Update函数将不会受到影响。而且影响到的变量是deltaTime,fixedDeltaTime不会受到影响。使用时应该使用Update函数和deltaTime的配合使用。由于fixedUpdate只是使其帧率下降,在其中使用运动等会发生跳帧现象。
32.光照烘培和太阳光:
即将静态物体自发光,影子与环境光等进行预先的烘培,从而使光照的效果获得预先的计算存储。当有其余光源靠近时,相关部分会根据烘培的效果进行呈现。
首先点击playerSetting,设置光照为Deferred
(1)首先打开Lighting窗口,点击Object,点击renderers,点选场景中要进行烘培的物体(被选择的物体烘培后会在相互之间烘培出反射的环境光效果),点选Lightmap static,这样物体就会造成静态物体。这里若是baking设置为baked,那么烘培的结果是地上出现固定的影子。若是选择realtime,那么地上的阴影就是实时的。
(2)选择要用于烘培的光源。点击renderes旁边的lights,在层次视图中点选一个光源,光源类型暂时只能是平行光,设置光照强度和反射的强度。
(3)进行环境设置:点击Scene,这里在Sun下选择一个光源,这样天空中会出现一个太阳,太阳的位置,角度等将跟随该光源变化。设置环境光的强度。点击precomputed Realtime GI设置CPU Usage的质量。而后点击build。
40.关于Destroy
调用Destroy()
系统会首先执行disable操做
而后会执行OnDisable方法
这里若是在OnDisable根据名字或者标签查找该物体将会的系统的一个错误提示,可是不会发生使程序崩溃的错误警告go.IsActive() && go.GetTag() != 0,
最后执行OnDestroy方法
这里若是在OnDisable根据名字或者标签查找该物体将会获得空的结果。
41.退出场景致使的问题解决办法
有三个敌人,攻击这三个敌人,血量为零时调用destroy销毁敌人。在敌人的的ondestory中判断是否还有标签为敌人的物体存在,若是没有就断定赢了,若是有就判断本身是否死亡,若是死亡就输了。这里若是退出场景的时候本身先被系统销毁,就会发生赢了的结果。若是敌人先被销毁,就会发生输了的结果。如今怎么让这两种状况都不会发生
8:18:48
牛牛她爸 2017/7/10 8:18:48
@阿辉用一个列表来记住三个敌人
牛牛她爸 2017/7/10 8:19:01
打死一个就从列表中标记他dead
40.光照探头的使用:
在光照烘培的基础上,让烘培的光照对非静态物体产生应该有的光照效果(该静态物体的renderer下须要设置light probe为blend probe)。
(1)设置光源,相关设置和光照烘培相同,在设置灯光类型中baking须要设置为baked。
(2)添加光照探头,新建空物体,添加light probe group组件,而后在光源附近添加尽可能多的光照探头。
(3)而后点击lighting下的build进行烘培。
(4)放入一个物体,在其renderer下Light Probes选择Blend Probes。
40.太阳光晕:
(1)新建光晕物体new Flare,并添加贴图设置尺寸颜色。
(2)将该物体添加到光源的light组件下flare下。此时若是该光源是和天阳相关的,那么光晕就会产生在太阳上,不然会产生在光源上。对于其余好比和太阳相关的物体,添加组件Lend Flare,添加flare文件,而后点击Directional。
45.导出包致使的BUG:导出Asset包以后,项目中的tag便签并不会一块儿export,所以再导入到其余项目或者电脑上以后,相应的tag的代码就会失效,致使一些错误,当build以后,这些错误就会显现出来。正确的导出以后还要复制用户的设置文件夹。
三.须要掌握的Unity知识
1、Unity做为3D游戏引擎必需要掌握固定流水线和可编程流水线,由于涉及到矩阵变换的知识点,在项目开发中会用获得的,若是读者不懂的能够查阅资料。
2、Unity做为3D引擎有本身的坐标系,在此强调一点,虽然它的图形API分为DirectX和OpenGL,可是它的世界坐标系是左手坐标系。
3、另外要掌握的坐标系有屏幕坐标系,UI坐标系,视口坐标,包括它们的原点是在哪一个位置,由于在项目开发中也会涉及到以上三个坐标系之间的变换。
4、函数的执行顺序,好比Awake,OnEnable,Start 等,以及3D碰撞体的执行效率,好比球体,胶囊体,立方体,Mesh等等。
5、程序的优化处理,这个是面试考察的重点,内存的管理也是Unity程序开发的重中之重。内存管理无非就是对内存的使用,针对UI的内存管理使用的是图集方式,Unity自身的图集功能浪费内存,好比2048*2048的图集大小,它占的内存是4M,也就是说无论图集是否填满,它都须要在内存中开辟4M的空间,可是若是使用Texture Packer工具就能够节省没有填满的空间,针对大量UI的加载能够采用分类打包图集的方法处理。固然内存池的使用也是能够应用到UI的管理,另外就是对3D场景资源的管理,须要场景图片有本身的图库,这样图片能够重复利用,另外模型的面数,骨骼数量,材质数量这些都须要去关注。
6、内存优化还须要涉及到图片的格式,不带Alpha通道的图片采用jpg格式,带有Alpha通道的采用png格式,这是一种处理方式,另一种处理方式就是将Alpha通道单独拿出来,全部的图片都是jpg格式,而后用带有Alpha通道的图片跟jpg格式文件进行结合使用。这样也能够优化图片的大小。
7、在架构设计方面,就要注意了,代码的编写,好比经常使用的设计模式,工厂模式,单例模式,MVC模式,FSM模式,观察者模式等,这些模式做为开发者必需要掌握的。(屁,指挥单例模式)
8、接下来就是Shader编写了,在这里给读者推荐一个编辑器工具Shader Forge编辑器,对于一些材质渲染很是好用,这个能够做为读者学习Shader的工具。
9、另外对于C#中定义的String,StringBuilder或者List,ArrayList等它们之间的区分要搞清楚。
10、不一样机型的适配处理,技术验证等。
11、热更新技术的实现,市面上应用比较广的是ulua做为脚本语言的框架设计。
12、做为客户端开发者也须要了解一些网络方面的知识,好比tcp,udp,http这些协议处理的方式。
十4、做为渲染场景的后处理方式,好比Bloom,Blur,HDR,SSAO,PSSM等等。
十5、C#中的事件监听,委托的使用也要熟练掌握。
十6、协程与多线程的区别。
十7、文本文件的加载,好比json,xml,csv,二进制等等。
十8、有必要掌握的插件:PlayMaker,ITween,Behavior Designer。