unity出现文件可能已损坏或与更新安装qq炫舞版本信息文件损坏的Unity 序列化怎么解决和处理呢?

答:mono是.net的一个开源跨平台工具,就类似java虚拟机,java本身不是跨平台语言,但运行在虚拟机上就能够实现了跨平台。.net只能在windows下运行,mono可以实现跨平台编译运行,可以运行于Linux,Unix,Mac OS等。

38、简述Unity3D支持的作为脚本的语言的名称?

答:Unity的脚本语言基于Mono的.Net平台上运行,可以使用.NET库,这也为XML、数据库、正则表达式等问题提供了很好的解决方案。

Unity里的脚本都会经过编译,他们的运行速度也很快。这三种语言实际上的功能和运行速度是一样的,区别主要体现在语言特性上。

39、Unity3D是否支持写成多线程程序?如果支持的话需要注意什么?

答:仅能从主线程中访问Unity3D的组件,对象和Unity3D系统调用

支持:如果同时你要处理很多事情或者与Unity的对象互动小可以用thread,否则使用coroutine。

注意:C#中有lock这个关键字,以确保只有一个线程可以在特定时间内访问特定的对象

40、Unity3D的协程和C#线程之间的区别是什么?

答:多线程程序同时运行多个线程 ,而在任一指定时刻只有一个协程在运行,并且这个正在运行的协同程序只在必要时才被挂起。

除主线程之外的线程无法访问Unity3D的对象、组件、方法。

Unity3d没有多线程的概念,不过unity也给我们提供了StartCoroutine(协同程序)和LoadLevelAsync(异步加载关卡)后台加载场景的方法。 StartCoroutine为什么叫协同程序呢,所谓协同,就是当你在StartCoroutine的函数体里处理一段代码时,利用yield语句等待执行结果,这期间不影响主程序的继续执行,可以协同工作。

41、U3D中用于记录节点空间几何信息的组件名称,及其父类名称

42、向量的点乘、叉乘以及归一化的意义?

答:1)点乘描述了两个向量的相似程度,结果越大两向量越相似,还可表示投影

2)叉乘得到的向量垂直于原来的两个向量

3)标准化向量:用在只关系方向,不关心大小的时候

43、矩阵相乘的意义及注意点?

答:用于表示线性变换:旋转、缩放、投影、平移、仿射

注意矩阵的蠕变:误差的积累

44、为何大家都在移动设备上寻求U3D原生GUI的替代方案

答:不美观,OnGUI很耗费时间,使用不方便

45、请简述如何在不同分辨率下保持UI的一致性

答:NGUI很好的解决了这一点,屏幕分辨率的自适应性,原理就是计算出屏幕的宽高比跟原来的预设的屏幕分辨率求出一个对比值,然后修改摄像机的size。

答:Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。使用动态字体时,Unity将不会预先生成一个与所有字体的字符纹理。当需要支持亚洲语言或者较大的字体的时候,若使用正常纹理,则字体的纹理将非常大。

47、当一个细小的高速物体撞向另一个较大的物体时,会出现什么情况?如何避免?

答:穿透(碰撞检测失败)

答:当物体是否可见切换之时。可以用于只需要在物体可见时才进行的计算。

49、什么叫动态合批?跟静态合批有什么区别?

答:如果动态物体共用着相同的材质,那么Unity会自动对这些物体进行批处理。动态批处理操作是自动完成的,并不需要你进行额外的操作。

区别:动态批处理一切都是自动的,不需要做任何操作,而且物体是可以移动的,但是限制很多。静态批处理:自由度很高,限制很少,缺点可能会占用更多的内存,而且经过静态批处理后的所有物体都不可以再移动了。

答:String是字符串常量。

String类型是个不可变的对象,当每次对String进行改变时都需要生成一个新的String对象,然后将指针指向一个新的对象,如果在一个循环里面,不断的改变一个对象,就要不断的生成新的对象,所以效率很低,建议在不断更改String对象的地方不要使用String类型。

StringBuilder对象在做字符串连接操作时是在原来的字符串上进行修改,改善了性能。这一点我们平时使用中也许都知道,连接操作频繁的时候,使用StringBuilder对象。

答:LightMap:就是指在三维软件里实现打好光,然后渲染把场景各表面的光照输出到贴图上,最后又通过引擎贴到场景上,这样就使物体有了光照的感觉。

答:表面着色器的抽象层次比较高,它可以轻松地以简洁方式实现复杂着色。表面着色器可同时在前向渲染及延迟渲染模式下正常工作。

顶点片段着色器可以非常灵活地实现需要的效果,但是需要编写更多的代码,并且很难与Unity的渲染管线完美集成。

固定功能管线着色器可以作为前两种着色器的备用选择,当硬件无法运行那些酷炫Shader的时,还可以通过固定功能管线着色器来绘制出一些基本的内容。

44、协同程序的执行代码是什么?有何用处,有何缺点?

作用:一个协同程序在执行过程中,可以在任意位置使用yield语句。yield的返回值控制何时恢复协同程序向下执行。协同程序在对象自有帧执行过程中堪称优秀。协同程序在性能上没有更多的开销。缺点:协同程序并非真线程,可能会发生堵塞。

Mock与Stub的区别:Mock:关注行为验证。细粒度的测试,即代码的逻辑,多数情况下用于单元测试。Stub:关注状态验证。粗粒度的测试,在某个依赖系统不存在或者还没实现或者难以测试的情况下使用,例如访问文件系统,数据库连接,远程协议等。

46、射线检测碰撞物的原理是?

答:射线是3D世界中一个点向一个方向发射的一条无终点的线,在发射轨迹中与其他物体发生碰撞时,它将停止发射 。

47、客户端与服务器交互方式有几种?

答: socket通常也称作"套接字",实现服务器和客户端之间的物理连接,并进行数据传输,主要有UDP和TCP两个协议。Socket处于网络协议的传输层。

48、八十三:Unity中,照相机的Clipping Planes的作用是什么?调整Near、Fare两个值时,应该注意什么?

答:剪裁平面 。从相机到开始渲染和停止渲染之间的距离。

50、请问alpha test在何时使用?能达到什么效果?

Alpha Test,中文就是透明度测试。简而言之就是V&F shader中最后fragment函数输出的该点颜色值(即上一讲frag的输出half4)的alpha值与固定值进行比较。Alpha Test语句通常于Pass{}中的起始位置。Alpha Test产生的效果也很极端,要么完全透明,即看不到,要么完全不透明。

51、UNITY3d在移动设备上的一些优化资源的方法

答:中会由GC来自动释放。

框架中间语言(Intermediate Language)的缩写。使用.NET框架提供的编译器可以直接将源程序编译为.exe或.dll文件,但此时编译出来的程序代码并不是CPU能直接执行的机器代码,而是一种中间语言IL(Intermediate Language)。

使用中间语言的优点有两点,一是可以实现平台无关性,既与特定CPU无关;二是只要把.NET框架某种语言编译成IL代码,就实现.NET框架中语言之间的交互操作(这就是为什么unity3D里面可以c#和js混编)。

在Mac OS上,因为iOS的现有限制,面向iOS的C#代码会通过AOT编译技术直接编译为ARM汇编代码。而在Android上,应用程序会转换为IL,启动时再进行JIT编译。

JIT:即时编译(Just In-Time compile),这是.NET运行可执行程序的基本方式,编译一个.NET程序时,编译器将源代码翻译成中间语言,它是一组可以有效地转换为本机代码且独立于CPU的指令。

当执行这些指令时,实时(JIT)编译器将它们转化为CPU特定的代码。部分加密软件通过挂钩JIT来进行IL加密,同时又保证程序正常运行。JIT也会将编译过的代码进行缓存,而不是每一次都进行编译。所以说它是静态编译和解释器的结合体。

AOT:静态编译,它在程序运行之前就编译好了。

其相对于欧拉角的优点:

中有很多常见的委托如:Func 、Action 作用:提高方法的扩展性

通过CTS提供了公共的类型,然后翻译生成对应的.Net类型。

CLS:Common Language Specification 通用语言规范。不同语言语法的不同。每种语言都有自己的语法,.Net通过CLS提供了公共的语法,然后不同语言翻译生成对应的.Net语法。

程序集。(中间语言,源数据,资源,装配清单)

中所有可序列化的类都被标记为_?

中提供了另外一种语法来进行尝试性的类型转换,那就是关键字 is 和 as 所做的工作。

(1)is 只负责检查类型的兼容性,并返回结果:true 和 false。→ 进行类型判断

// 执行类型兼容性检查 版本。在C++中,函数指针只不过是一个指向内存位置的指针,它不是类型安全的。我们无法判断这个指针实际指向什么,像参数和返回类型等项久更无从知晓了。

而.NET委托完全不同,委托是类型安全的类,它定义了返回类型和参数的类型。委托类不仅包含对方法的引用,也可以包含对多个方法的引用。

默认的委托类型有哪几种?

泛型Action委托表示引用一个void返回类型的方法。这个委托类存在16种重载方法。

Framework 中,通过 ThreadPool 类型提供的5个静态方法可以获取和设置线程池的上限和下限,同时它还额外地提供了一个方法来让程序员获知当前可用的线程数量,下面是这五个方法的签名:

中,它会自动编译为: 中就有很多的异步编程支持,比如很多地方都有Begin、End 的方法,就是一种异步编程支持,她内部有些是利用多线程,有些是利用硬件的特性来实现的异步编程。

框架有哪些适配器模式的应用?

Com 对象不符合.net对象的接口

各种数据库并没有提供DataSet接口

使用DBDataAdapter可以将任何各数据库访问/存取适配到一个DataSet对象上。

(3)集合类中对现有对象的排序(Adapter变体);

实现一个排序适配器(继承IComparer接口),然后在其Compare方法中对两个对象进行比较。

中的调用Web服务等操作。

代理模式指的是给某一个对象提供一个代理,并由代理对象控制对原对象的访问。

11.外观模式、适配器模式和代理模式区别?

这三个模式的相同之处是,它们都是作为客户端与真实被使用的类或系统之间的一个中间层,起到让客户端间接调用真实类的作用,不同之处在于,所应用的场合和意图不同。

代理模式与外观模式主要区别在于,代理对象无法直接访问对象,只能由代理对象提供访问,而外观对象提供对各个子系统简化访问调用接口,而适配器模式则不需要虚构一个代理者,目的是复用原有的接口。外观模式是定义新的接口,而适配器则是复用一个原有的接口。

另外,它们应用设计的不同阶段,外观模式用于设计的前期,因为系统需要前期就需要依赖于外观,而适配器应用于设计完成之后,当发现设计完成的类无法协同工作时,可以采用适配器模式。然而很多情况下在设计初期就要考虑适配器模式的使用,如涉及到大量第三方应用接口的情况;代理模式是模式完成后,想以服务的方式提供给其他客户端进行调用,此时其他客户端可以使用代理模式来对模块进行访问。

总之,代理模式提供与真实类一致的接口,旨在用来代理类来访问真实的类,外观模式旨在简化接口,适配器模式旨在转换接口。

2.ipairs并不会输出table中存储的键值对,会跳过键值对,然后顺序输出table中的值。而pairs会输出table的键值对,先顺序输出值,再乱序(键的哈希值)输出键值对。

3.函数冒号与点的区别?

冒号的第一个参数默认为self,指向调用该函数的表。

5.普通全局变量和static全局变量的区别?

生存周期相同,作用域不同,普通全局变量可以作用于所有文件,extern声明即可,而static全局变量只能作用于当前文件。

6.请写一个带有不定参数的lua函数,并输出所有的参数?

7.如下一段程序,请在TODO处插入代码,使后面对table新建值时提示错误,并使其无效?

热更新也叫不停机更新,是在游戏服务器运行期间对游戏进行更新。实现不停机修正bug、修改游戏数据等操作。也可以这样讲:一辆车以时速150km跑着,突然爆胎了,然后司机告诉你,我不停车,你去把轮胎换了,小心点。

9.热更新的原理是什么?

ua中的require会阻止多次加载相同的模块。所以当需要更新系统的时候,要卸载掉响应的模块。(把package.loaded里对应模块名下设置为nil,以保证下次require重新加载)并把全局表中的对应的模块表置 nil 。同时把数据记录在专用的全局表下,并用 local 去引用它。

初始化这些数据的时候,首先应该检查他们是否被初始化过了。这样来保证数据不被更新过程重置。

这种做法简单粗暴,虽然能完成热更新,但是 问题很多,旧的引用的模块无法得到更新,这种程度的热更新显然不能满足现在的游戏开发需求。

10. lua深拷贝和浅拷贝的区别?

使用 = 运算符进行浅拷贝

1.拷贝对象是string、number、bool基本类型。拷贝的过程就是复制黏贴!修改新拷贝出来的对象,不会影响原先对象的值,两者互不干涉。

2.拷贝对象是table表,拷贝出来的对象和原先对象时同一个对象,占用同一个对象,只是一个人两个名字,类似C#引用地址,指向同一个堆里的数据~,两者任意改变都会影响对方。

11.Lua如何实现深拷贝?

复制对象的基本类型,也复制源对象中的对象

常常需用对Table表进行深拷贝,赋值一个全新的一模一样的对象,但不是同一个表

Lua没有实现,封装一个函数,递归拷贝table中所有元素,以及设置metetable元表

如果key和value都不包含table属性,那么每次在泛型for内调用的Func就直接由if判断返回具体的key和value

如果有包含多重table属性,那么这段if判断就是用来解开下一层table的,最后层层递归返回。

核心逻辑:使用递归遍历表中的所有元素。

12.解释下lua中的元表和元方法?

元表metetable : 允许该表table行为,行为关联元方法,类似一种“操作指南”,包含各种操作行为的解决方案!

元方法:当表执行某些操作失败的时候,操作指南里的元方法指导你的行为~~

13.Lua如何实现面向对象?

面向对象特性:封装、继承、多态

Lua中table是非常强大的数据结构,利用table再结合元表metatable,可以方便的在Lua中模拟类,并实现面向对象编程中具有的特性:封装、继承、多态

14.说说lua中的闭包?

子函数可以使用父函数中的局部变量,这种行为可以理解为闭包!

不同实例上的两个不同闭包,闭包中的upvalue变量各自独立,从而实现数据隔离

两个闭包共享一份变量upvalue,引用的是更外部函数的局部变量(即Upvlaue),变量是同一个,引用也指向同一个地方,从而实现对共享数据进行访问和修改。

3、利用闭包实现简单的迭代器

迭代器只是一个生成器,他自己本身不带循环。我们还需要在循环里面去调用它才行。

1)while…do循环,每次调用迭代器都会产生一个新的闭包,闭包内部包括了upvalue(t,i,n),闭包根据上一次的记录,返回下一个元素,实现迭代

2)for…in循环,只会产生一个闭包函数,后面每一次迭代都是使用该闭包函数。内部保存迭代函数、状态常量、控制变量。

15. 请深入说明Lua的数据结构和内存占用?

lua的数据结构的内存分配是动态的,常见的数据结构是string和table。

16.热更新方案有哪些?以及具体热更流程?

——策略:完整更新资源放在包里

——缺点:安装包下载时间长,首次安装久

——策略:少部分资源放在包里,大部分更新资源存放在更新资源器中

——优点:安装包小,安装时间短,下载快

——缺点:首次更新下载解压缩包时间旧

——海外游戏大部分是使用分包策略,平台规定

——国内游戏大部分是使用整包策略

——资源服务器地址URL

5、【从资源服务器】下载单个文件或多个文件

——获取到downloadHander的文件数据Data,完成后会回调方法,将文件Data作为参数传出

访问不存在的数据,由__index提供最终结果

__index元方法可以是一个函数,Lua语言就会以【表】和【不存在键】为参数调用该函数

__index元方法也可以是一个表,Lua语言就访问这个元表

18.请写一个多值返回的函数 ?

19.请写一个可变参数的函数?

new传进的参数当做一个本地表,

元表本身Self作为元表,设置元方法,将其作为参数表o的元表,并返回出去

从而实现C# new构造函数。

调用new的时候,其实访问的是元表内容。

在lua中我们引用其他模块的时候,可以使用三种方法:require,loadfile和dofile。那么它们有什么区别呢?

我要回帖

更多关于 安装qq炫舞版本信息文件损坏 的文章

 

随机推荐