unity3D面试题

  1. 文章目录

  2. 目录

    目录

    文章目录

    前言

    一、下列数据类型哪些是值类型,哪些引用类型,int、double、数组、struct、string、bool、char、object、enum 、 自定义类、集合?

    二、值类型跟引用类型有什么区别

    三、C#什么是 装箱 拆箱

    四、列举你了解的常用数据结构

    五、列举你了解的排序算法,选取一种使用伪代码写出来

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

    七、Unity3d脚本从唤醒到销毁有着一套比较完整的生命周期,请列出系统自带的几个重要的方法。

    九、协程和C#线程之间的区别是什么

    十、Unity3d提供了几种光源类型,分别是哪几种?

    十一、Unity3D动态加载资源的方式?

    十二、Unity3D中的碰撞器和触发器的区别?

    十三、物体发生碰撞的必要条件

    总结


    前言

    unity开发部分试题,持续更新


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、下列数据类型哪些是值类型,哪些引用类型,int、double、数组、struct、string、bool、char、object、enum 、 自定义类、集合?

    答:值类型:int,double,struct,bool,char,enum;

        引用类型:数组,string,object,自定义类,集合。

    二、值类型跟引用类型有什么区别

    答:值类型直接存储数据本身,值类型声明后,编译器直接在堆上为其分配内存,值类型传递时直接传递相应数据;

    引用类型存储的是数据的引用,当声明一个引用类型时,先在栈中分配内存存储一个地址,当实例化时,才分配堆上的内存,并把堆上内存的地址保存在栈上,引用类型传递的时数据的地址。

    三、C#什么是 装箱 拆箱

    答:装箱拆箱实际是数据类型的转换,C#中的数据类型的最终的基类都是Object,所以理论上,各个数据类型是可以相互转换的;

    装箱是将值类型转换为引用类型;拆箱是将引用类型转换为值类型;

    装箱实际就是创建一个新的堆内存,然后把值类型的数据拷贝到该内存,最后把这个堆内存对象的地址返回出来;

    拆箱实际就是将引用类型分配在堆上的数据拷贝到值类型的内存空间中。

    四、列举你了解的常用数据结构

    答:常用数据结构:数组、List,Queue(先进先出),Stack(后进先出),Dictionary;较少使用的数据结构:Array,ArrayList,LinkedList。

    五、列举你了解的排序算法,选取一种使用伪代码写出来

    答:排序算法:1.冒泡排序,2.选择排序,3.插入排序,4.希尔排序,5.快速排序,6.堆排序,7.归并排序,8.桶排序;

  3. //冒泡排序实现:将一个数组中的元素按照从小到大排序;
    int[] arr = new[] { 1,24,4,7, 18, 43, 21 };
    int temp = 0;
    for (int i = 0; i < arr.Length - 1; i++)
    {
        for (int j = 0;jarr[j+1])
           {
              temp = arr[j];
              arr[j] = arr[j + 1];
              arr[j + 1] = temp;
           }
         }
    }
  4. 六、向量的点乘、叉乘以及归一化的意义

    答:向量点乘就是两个向量长度的绝对值乘以两个向量夹角的余弦值,也就是一个向量长度的绝对值乘以另一个向量在该向量上的投影,其结果是一个数值;如果两个向量点乘结果大于0,那么两个向量的夹角小于90°,如果两个向量点乘结果等于0,那么两个向量垂直,如果两个向量点乘结果小于0,那么两个向量的夹角大于90°;

    向量叉乘就是两个向量长度的绝对值乘以其夹角的正弦值,其结果是一个垂直于这两个向量所在平面的一个新的向量;新向量的方向遵循右手坐标系法则;

    向量归一化就是在保证向量方向不变的情况下,使得向量的模为1。

    七、Unity3d脚本从唤醒到销毁有着一套比较完整的生命周期,请列出系统自带的几个重要的方法。

    答:unity3d生命周期函数:Awake(脚本实例被创建时调用)——OnEnable(当对象激活时调用)-----Reset(用户点击检视面板的Reset按钮或者首次添加该组件时调用,此函数只在编辑器模式下被调用)——Start(第一次Update之前调用,仅被调用一次))——FixedUpdate(每个固定物理时间间隔调用一次,如果固定时间步长小于实际帧更新时间,那么每一帧物理周期将会发生不止一次)——OnMouseXXX(输入事件)——Update(每帧调用一次)——LateUpdate(在Update之后没帧调用一次)——OnGUI(渲染处理UI事件)——OnDisable(对象非激活时调用)——OnDestroy(对象被销毁时调用)。

  5. 参考:https://docs.unity3d.com/cn/current/Manual/ExecutionOrder.html

    八、UGUI 有那些因素会影响UI显示层级

    答:1.不同的Camera的Depth

            2.相同Camera下的不同SortingLayer

            3. 相同SortingLayer下的不同Z轴/Order in Layer

           4.不同Canvas下的Sort Order

           5.相同Canavs下UI物体的子父级关系,同一层级下UI物体的排序,子父级时,父级先渲染子级后渲染,所以子级会覆盖父级,同一层级时,按顺序渲染,所以下面的会覆盖上面的。

    九、协程和C#线程之间的区别是什么

    答:线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的),协程和线程一样共享堆,不共享栈;一个应用程序一般对应一个进程,一个进程中有一个主线程,还有多个辅助线程,线程之间平行运行,线程中可以随时开启协程,unity中,协程就是跑在主线程中的。

    十、Unity3d提供了几种光源类型,分别是哪几种?

    答:unity中提供了4中光源:

    Directional light: 平行光,类似太阳的日照效果。

    Point light: 点光源,类似蜡烛。

    Spotlight: 聚光灯,类似手电筒。

    Area Light:区域光,无法用作实时光照,一般用于光照贴图烘培。

    十一、Unity3D动态加载资源的方式?

    答:1.Resources:只能加载Resources目录中的资源;

    2.AssetBundle:加载AB包资源;

    3.UnityWebRequest:加载任意地方的资源,主要用途是从服务器加载资源;

    4.AssetDatabase:只能加载Assets目录下的资源,编辑器模式下测试使用。

    十二、Unity3D中的碰撞器和触发器的区别?

    答:碰撞器是一个unity的组件,触发器只是碰撞器组件的一个属性,触发器可以通过Is Trigger控制两个带碰撞器的物体是否真正发生物理碰撞;当Is Trigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数;当Is Trigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果,可以调用OnTriggerEnter/Stay/Exit函数。

    十三、物体发生碰撞的必要条件

    答:两个物体都有碰撞器,至少有一个物体有刚体。


  6. 总结

你可能感兴趣的:(unity,3d,游戏引擎)