IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity面试题整理(含答案) -> 正文阅读

[游戏开发]Unity面试题整理(含答案)

在这里插入图片描述
一.值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用,数据存储在数据堆中。
值类型(value type):byte,short,int,long,float,double,decimal,char,bool 和 struct 统称为值类型。值类型变量声明后,不管是否已经赋值,编译器为其分配内存。
引用类型(reference type):string 和 class统称为引用类型。当声明一个类时,只在栈中分配一小片内存用于容纳一个地址,而此时并没有为其分配堆上的内存空间。当使用 new 创建一个类的实例时,分配堆上的空间,并把堆上空间的地址保存到栈上分配的小片空间中。
值类型的实例通常是在线程栈上分配的(静态分配),但是在某些情形下可以存储在堆中。引用类型的对象总是在进程堆中分配(动态分配)。

不同点:
1)范围方面
C#的值类型包括:结构体(数值类型、bool型、用户定义的结构体),枚举,可空类型。
C#的引用类型包括:数组,用户定义的类、接口、委托,object,字符串。
2)内存分配方面
数组的元素不管是引用类型还是值类型,都存储在托管堆上。【注意:托管堆和进程堆,是一种么?另外:线程堆栈(Thread Stack)和托管堆(Managed Heap),日后会再单独涉及】
引用类型在栈中存储一个引用,其实际的存储位置位于托管堆。简称引用类型部署在托管推上。而值类型总是分配在它声明的地方:作为字段时,跟随其所属的变量(实 例)存储;作为局部变量时,存储在栈上。(栈的内存是自动释放的,堆内存是.NET中会由GC来自动释放)

二.https://blog.csdn.net/md1310/article/details/83832633
GC:垃圾回收机制,为了避免内存溢出
GC会定期执行垃圾回收,回收分配给没有 有效引用 的对象的内存

如何避免
减少new产生对象的次数
使用公用的对象,即静态成员Static,但要谨慎使用
将String换成StringBuilder拼接字符串,string容易导致内存泄露
使用对象池GamObject Pool
在字符串暂存池中的是不会被GC的
避免使用foreach,尽量使用for循环

三.接口是指定一组函数成员而不实现他们的引用类型。所以只能类和结构来实现接口,在继承该接口的类里面要实现接口的所有方法。

四.输出结果:AB

五.Assembly.LoadFrom()加载dll
assembly.GetType(“ClassA”);
type.GetMethod(“MethodA”);

六.unity不支持多线程,但可以使用多线程的类库进行多线程编程
Unity使用多线程注意:
变量都是共享的(都能指向相同的内存地址)
UnityEngine的API不能在分线程运行
UnityEngine定义的基本结构(int,float,Struct定义的数据类型)可以在分线程计算,如 Vector3(Struct)可以 , 但Texture2d(class,根父类为Object)不可以。
UnityEngine定义的基本类型的函数可以在分线程运行
Debug.Log()支持在子线程中调用
在这里插入图片描述
一.Awake、OnEnable、Rest、Start、FixedUpdate、Update、LateUpdate、OnGUI、OnApplicationPause、OnApplicationQuit、OnDisable、OnDestroy

二.a[10], int temp
void fun()
{
temp = i;
j = temp;
i = j;
if(i < j) fun();
}

三.Rigibody(刚体)组件、Constant Force(恒力)组件、Character Controller(角色控制器)组件、Collider(碰撞体/器)组件、Joint(关节)组件。执行效率顺序优劣:SphereCollider > CapsuleCollider > BoxCollider。

四.SO是什么:
用来存储数据的一个资源文件
有什么作用:
存储数据在资源文件中,可以像其他资源那样管理它
可以在项目之间很好的复用,不用再制作Prefab那样导入导出
使用场景:
数据对象和表格数据、例如,本地化数据、清单目录、表格、敌人配置等。
在场景间共享的Singleton对象,游戏状态和游戏设置。

五.资源放在Resources目录下,资源放在StreamAssets目录下
加载的资源不需要后缀

六.AssetBundle.LoadAsset(“shader”);
在这里插入图片描述
七.NGUI的Atlas和UGUI的Sprite Atlas
NGUI中打开Atlas maker,将图片拖入Sprites后Create图集
UGUI中Assets右键Create创建SpriteAtlas,需要做成图集的图片文件夹选中,然后点击packpreview就OK

八.协程。作用是将消耗时间很多的步骤分步做完。应用场景:无限列表、管道、并发。

九.unity不支持多线程,但可以使用多线程的类库进行多线程编程。

十.ref 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。传递到 ref 参数的参数必须最先初始化。属性不是变量,不能作为 ref 参数传递。不要把字段写成属性,这样Ref就不能用了。

out 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。用来在函数中返回多个值。要使用 out 参数,必须将参数作为 out 参数显式传递到方法。out 参数的值不会传递到 out 参数(也就是out只出不进)。
ref:
private void Start()
{
int num1 = 0;
int num2 = 0;
Test1(ref num1, num2);
Debug.Log(“num1:” + num1 + “\nnum2:” + num2);
}

private void Test1(ref int num1, int num2)
{
num1 = 10;
num2 = 10;
}

out:
private void Start()
{
int num;
Test2(out num);
Debug.Log(“num:” + num);
}

private void Test2(out int num)
{
num = 10;
}

十一.Quaternion类又称四元数,属于struct类型。存储和表示对象的旋转角度。

十二.Action为了执行委托函数,Function为了获得返回值。

十三.声明AndroidJavaClass类,将包名作为参数传递进类中,用GetStatic函数获取指定包名的Activity。CallStatic静态方法获取一個Android原生类型。Call(“方法名”,参数1)获取方法。

通过C接口调用ObjC的代码,使用OC调用Swift代码,通过Attribute调用dll,然后声明静态方法就可以调用这个方法。
在这里插入图片描述
六.是协程,与线程不一样,协程是一种轻量级线程。
IEnumerator enumerator = StartAB(path, true);
enumerator.MoveNext();
dic = (Dictionary<string, type>)enumerator.Current;
调用MoveNext()方法,他将开启协程的运行,遇到第一个yiedl return就会暂停协程,暂停后调用Current属性,就能得到当前协程的返回值。

七.Quaternion来存储和表示对象的旋转角度,Rotation的类型是Quaternion

八. Vector3 d1 = transform.forward;
Vector3 d2 = new Vector3(0, 3, 0);
float angle = Vector3.Angle(d1, d2);

    if (angle > 90)
        angle = Mathf.Abs(180 - angle);

九.ILRuntime是一个基于C#的热更新框架。

十.光照贴图。把物体相互的影响明暗信息保存到贴图上面,模拟灯光照射。
window --> lightmapping,勾选要bake的物件,勾选Static,点击Bake。

十三.中等精度:half
中等精度浮点值;通常为 16 位(范围为 –60000 至 +60000,精度约为 3 位小数)。
半精度对于短矢量、方向、对象空间位置、高动态范围颜色非常有用。

低精度:fixed
最低精度的定点值。通常是 11 位,范围从 –2.0 到 +2.0,精度为 1/256。
固定精度对于常规颜色(通常存储在常规纹理中)以及对它们执行简单运算非常有用。

Vertex Shader顶点着色是一段执行在GPU上的程序(一般用HLSL来编写),主要操作顶点。
在这里插入图片描述
class Solution
{
public:
ListNode *insertionSortList(ListNode *head)
{
if(headNULL || head->nextNULL) return head;
ListNode *cur=head;
ListNode *helper=new ListNode(0);
ListNode *pre;

    while(cur)
    {
        ListNode *next=cur->next;
        pre=helper;

        while(pre->next!=NULL && pre->next->val<cur->val)
        {
            pre=pre->next;
        }

        cur->next=pre->next;
        pre->next=cur;
        cur=next;
    }
    return helper->next;
}

}

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-09-09 12:07:03  更:2021-09-09 12:07:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 19:04:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码