面试题个人简答(可能不准确)
协同程序一般放在monobehavior中的哪个函数中?
StartCoroutine函数中开启协程,协同程序,顾名思义就是用来协助主要程序的,就好像一个额外的Update函数一样。
yield就像是一个红绿灯,在不能满足yield后面的条件时,协程会被挂起,把使用权交回调用它的父函数。
暂停游戏time.scaletime==0时,内置函数有什么变化
不会影响Update和LateUpate的执行速度,只会影响FixedUpdate的执行
简述StringBuilder的用途
StringBuilder提供了一个可变的字符串类型,可以用Append方法连接字符串,这样可以大幅度提高字符串的处理性能。内部维护了一个数组
列举你熟悉的.NET集合类,越多越好
字典,链表,队列,栈,
关键字ref和Out的作用
ref 和out都是用于作为函数参数传入函数,并传出多个值
ref在使用的时候必须先初始化,能在函数中被使用
out必须在函数内部赋值,Out在进入函数之后会清空自己,不能在函数内部被使用
关键字is和as 的用法
同:都是用来类型的判断和转换
is判断类型是不是某个类型或者父类型,返回值为true或false
as把一个类型转换为另外一个类型,只执行装箱和转换操作,做一次类型检查,一次null检查
碰撞器和触发器
碰撞器是触发器的载体,触发器只是碰撞器的一个属性
当isTigger未被勾选上时,碰撞器根据物理引擎产生碰撞效果,可以调用OnCollision函数,当勾选上时,物理效果取消,没有碰撞效果
动态加载资源的方法
一共有五种:
-
Resources:只能加载Resources目录中的资源
-
AssetBundle(资源包):
只能加载AB资源,AssetBundle.LoadFromFile()从文件中加载
www加载,和从内存中加载
-
WWW:可以加载任意处资源,包括项目外资源,如远程服务器
-
AssetDataBase:只能加载Asset目录下的资源,但只能用于Editor
-
UnityWebRequest :可以加载任意处资源 ,www升级版
Prefab的用处
打包希望重复使用的对象,提供动态实例化到场景中的方式,便于代码管理生成
优点:可以置入多个场景中,也可以在一个场景中生成多个
预制体改变,所有实例会发生改变
相机移动放在哪个函数中,为什么?
LateUpdate中,如果不放在LateUpdate中,相机移动有时候会发生在人物移动之前而造成瞬移现象
脚本的生命周期
Unity脚本生命周期与执行顺序 - iwiniwin - 博客园 (cnblogs.com)
设计模式以及代码描述
static MemoryMgr* Ins()//单例模式
{
static MemoryMgr Mgr;
return &Mgr;
}
DrawCall是什么,怎么降低DrawCall
DrawCall就是CPU设置好渲染状态叫GPU渲染的过程,怎么降低DrawCall
合成图集
高级特性降低为统一的低级特性的shader
Lua,C#和C++的GC原理,底层实现
Lua的垃圾回收算法原理简述
lua采用了标记清除式,GC算法,算法简述
标记:每次执行GC时,先以若干节点开始,逐个把直接或间接和它们相关的节点都做上标记
清除:当标记完成后,遍历整个对象链表,把被标记为需要删除的节点一一删除
lua 用白、灰、黑三色来标记一个对象的可回收状态
白色:可回收状态
详解:如果该对象未被GC标记,则此时白色代表当前对象为待访问状态,新创建的对象初始状态就应该被设置为白色,因为该对象还没有被GC标记到,所以保持初始状态颜色不变,仍然为白色(此时的白色为白1),如果该对象在GC标记状态后,仍然为白色,则此时代表该对象处于可回收状态(此时的白色为白2)
灰色:中间状态
详解:当前对象为待标记状态。当前对象以及被GC标记过,并且对象引用的对象还没有被标记
黑色:不可回收状态
详解:当前对象为已标记状态,并且该对象引用的对象也被标记了
不同工程间安全迁移asset数据
将Assets和Library一起迁移
导出包Package
用Unity 自带的Assets Server功能