【无标题】

值类型和引用类型区别

值类型:包含了所有简单类型(整数、浮点、bool、char)、struct、enum。

继承自System.ValueTyoe

引用类型包含了string,object,class,interface,delegate,array

继承自System.Object

异步加载场景

添加进度条展示异步加载的步骤
参考异步加载场景资源

拷贝策略:值类型是拷贝数据,引用类型是拷贝引用地址

如果值类型为传值参数,传值参数会在栈上新开辟一个副本,原先的值类型数据不会改变

如果引用类型是传值参数,传值参数会创建一个新的引用地址,两个引用地址会指向同一个对象实例的数据,实例数据会随着改变进行改变。(这种行为被称为副作用,一般实际项目不会这么操作,要么return返回参数,要么使用ref或者out修饰符)

深拷贝和浅拷贝的区别

浅拷贝 —只是拷贝了基本类型的数据,而引用类型数据,复制后也是会发生引用,我们把这种拷贝叫做“(浅复制)浅拷贝”,换句话说,浅复制仅仅是指向被复制的内存地址,如果原地址中对象被改变了,那么浅复制出来的对象也会相应改变。

深拷贝 —在计算机中开辟了一块新的内存地址用于存放复制的对象。不受到拷贝前对象的影响

深拷贝通俗易懂的理解就是:b通过a分享的链接买了一件和a一样的衣服,但是a和b的衣服确是两件长得一样的衣服,不管a的衣服是脏了还是破了都不会影像b的衣服

delegate

delegate(委托)是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If … Else(Switch)语句,同时使得程序具有更好的可扩展性。
可以将某种方法作为参数传入,例如
attack(String target_id,chooseGan());
attack(String target_id,chooseWeapon());
chooseWeapon(){用weapon攻击的代码};
chooseWeapon(){用gan攻击的代码};

请描述游戏动画有哪几种,以及其原理?

主要有关节动画、骨骼动画、单一网格模型动画(关键帧动画)。

关节动画:把角色分成若干独立部分,一个部分对应一个网格模型,部分的动画连接成一个整体的动画,角色比较灵活,Quake2中使用这种动画;

骨骼动画,广泛应用的动画方式,集成了以上两个方式的优点,骨骼按角色特点组成一定的层次结构,有关节相连,可做相对运动,皮肤作为单一网格蒙在骨骼之外,决定角色的外观;

单一网格模型动画由一个完整的网格模型构成,在动画序列的关键帧里记录各个顶点的原位置及其改变量,然后插值运算实现动画效果,角色动画较真实。

Unity3D是否支持写成多线程程序?

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

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

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

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

多线程:程序同时运行多个线程 ,而在任一指定时刻只有一个协程在运行,并且这个正在运行的协同程序只在必要时才被挂起。除主线程之外的线程无法访问Unity3D的对象、组件、方法。

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

协程过程:StartCoroutine(“test”) ->IEnumerator test()-> stopCoroutine(“test”)
作用:一个协同程序在执行过程中,可以在任意位置使用yield语句。yield的返回值控制何时恢复协同程序向下执行。协同程序在对象自有帧执行过程中堪称优秀。协同程序在性能上没有更多的开销。

缺点:协同程序并非真线程,可能会发生堵塞。

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

穿透(碰撞检测失败)

简述StringBuilder和String的区别?

String是字符串常量。

StringBuffer是字符串变量 ,线程安全。

StringBuilder是字符串变量,线程不安全。

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

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

堆和栈的区别?

  • 堆的申请速度较慢,容易产生内存碎片,但是用起来比较方便。
  • 而栈的申请速度较快,但却不受程序员的控制。
  • 栈申请的容量较小1-2M,堆申请大小虽受限于系统中有效的虚拟内存,但较大
  • ·栈负责保存我们代码执行或调用的路径,而堆则负责保存对象或者说数据的路径。

在堆栈里各自存放了什么内容
值类型:数据存储在栈上,超出作用域就自动清理

引用类型:数据存储在托管堆上,引用地址在线程栈上,地址指向数据存放的堆上

托管堆会由GC来自动释放 ,线程栈数据在作用域结束后会被清理。

在编辑场景时将GameObject设置为Static有何作用?

设置游戏对象为Static时,这些部分被静态物体挡住而不可见时,将会剔除(或禁用)网格对象。因此,在你的场景中的所有不会动的物体都应该标记为Static。

有A和B两组物体,有什么办法能够保证A组物体永远比B组物体先渲染?

把A组物体的渲染对列大于B物体的渲染队列,通过shader里面的渲染队列来渲染

将图片的TextureType选项分别选为“Texture”和“Sprite”有什么区别

Texture:是一张图片,但主要是用来改变物件的外观。有点像包装纸的概念,将物品用不同款式的包装纸(Texture)包装,让他看起来不一样。因为Texture本身不是物件,因此不能移动它。
Sprite:是一张图片,同时也是一个物件,意思是他拥有座标(x, y),你能移动/创建/删除他。
基本上将Texture + Rect Entity就是Sprite了。

问一个Terrain,分别贴3张,4张,5张地表贴图,渲染速度有什么区别?为什么?

没有区别,因为不管几张贴图只渲染一次。

重载和重写区别

静态重载:返回值无关,与参数个数,类型相关。编译阶段。便于扩展和维护。也就是相同方法名,传入参数不一样

重写:动态重写override(运行时,改写了方法表的新地址)。继承的时候子类对父类的方法进行重写

抽象方法的父类必须是抽象类,子类是抽象类可以不重写,抽象类不可以被实例化。

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值