Unity面试题F(Yanlz+...+F高薪就业+...+立钻哥哥+...)

《Unity面试题》

版本程序员

做者面试

参与者算法

完成日期数据库

备注编程

Unity_JobView_V01_1.0设计模式

严立钻服务器

 

2018.07.26网络

 

 

 

 

 

 

 

 

 

 

 

#Unity面试题ABC:http://www.javashuo.com/article/p-mwacxwca-gm.html架构

#Unity面试题D:http://www.javashuo.com/article/p-wuwcrclr-s.htmlapp

#Unity面试题E:http://www.javashuo.com/article/p-hmabbtmc-ba.html

#Unity面试题F:http://www.javashuo.com/article/p-olslkfao-cq.html

 

 

 

 

 

##《Unity面试题》发布说明:

++++“Unity面试题”是对在Unity职位面试中相关技术点的总结,立钻哥哥按照一个简单的章节分类进行整理。

++++固然,这些技术点有些是Unity经常使用的技术点,有些是各类面试题筛选整理,也有些是对Unity面试点的推断拓展。

++++“Unity面试题”将打形成Unity技术宝库,不可是面试的重要参考资料,也是对Unity知识点的汇总。

++++“Unity面试题”将采用简单概述,不拓展,将每一个技术点限定在简短篇幅中。

 

 

 

++++Unity面试题ABChttp://www.javashuo.com/article/p-mwacxwca-gm.html

++++Unity面试题Dhttp://www.javashuo.com/article/p-wuwcrclr-s.html

++++Unity面试题Ehttp://www.javashuo.com/article/p-hmabbtmc-ba.html

++++Unity面试题Fhttp://www.javashuo.com/article/p-olslkfao-cq.html

 

 

 

##《Unity面试题》目录:

#第一篇:Unity经典面试题

#第二篇:C#问题

#第三篇:Unity问题

#第四篇:Unity模拟面试

#第五篇:Unity面试进阶

#第六篇:立钻哥哥带您高薪就业

 

 

 

 

 

 

 

#第六篇:立钻哥哥带您高薪就业

#第六篇:立钻哥哥带您高薪就业

 

 

 

 

##6F.0一、Unity高薪就业01

##6F.0一、Unity高薪就业01

++6F.0一、Unity高薪就业01

++++6F.01.0一、写一个计时器工具,从整点开始计时,格式为00:00:00

++++6F.01.0二、用鼠标实如今场景中拖动物体,用鼠标滚轮实现缩放?

++++6F.01.0三、鼠标左键游戏对象使其旋转?

++++6F.01.0四、写出一我的物角色的有限状态机的简略代码,包括静止、移动、战斗、死亡几个状态的切换?

++++6F.01.0五、稳定排序和不稳定排序?

++++6F.01.0六、欧拉角和四元数理解?

++++6F.01.0七、什么是热更新? Unity如何实现热更新?

++++6F.01.0八、UI框架的构建,请描述实现?

++++6F.01.0九、NGUI和UGUI的区别对比?

++++6F.01.十、什么是装箱和拆箱?

++++6F.01.十一、C#中的Dictionary字典遍历方式?

++++6F.01.十二、NGUI的Sprite和UITexture使用的区别?

++++6F.01.1三、Mono、.Net和L2Cpp分别是什么?

++++6F.01.1四、六、八、十、1四、14,有什么规律?

++++6F.01.1五、四个数1,5,5,5,用加减乘除算出结果24,每一个数字只能用一次?

++++6F.01.1六、Unity文件是如何保存引用关系的? .meta文件到底有什么做用,这里边包含了什么内容?

++++6F.01.1七、为何使用多个Unity的摄像机这个功能可能很是重要?

 

 

 

 

 

 

 

 

###6F.01.0一、写一个计时器工具,从整点开始计时,格式为00:00:00

###6F.01.0一、写一个计时器工具,从整点开始计时,格式为00:00:00

++6F.01.0一、写一个计时器工具,从整点开始计时,格式为00:00:00

++++立钻哥哥:建立工程后添加一个Cube物体,为其添加一个脚本;

using UnityEngine;

using System.Collections;

 

public class MyCube : MonoBehaviour{

    private float timer = 0f;

    private int h = 0;

    private int m = 0;

    private int s = 0;

    private string timeStr = string.Empty;

 

    //Update is called once per frame

    void Update(){

        timer += Time.deltaTime;

    

        if(timer >= 1f){

            s++;

            timer = 0;

        }

 

        if(s >= 60){

            m++;

            s = 0;

        }

 

       if(m >= 60){

            h++;

            m = 0;

        }

 

        if(h >= 99){

            h = 0;

        }

    }    //立钻哥哥:void Update(){}

 

    void OnGUI(){

        timeStr = string.Format({0:D2}:{1:D2}:{2:D2}, h, m, s);

        GUI.Label(new Rect(10, 10, 100, 200), timeStr);

    }    //立钻哥哥:void OnGUI(){}

 

}    //立钻哥哥:public class MyCube:MonoBehaviour{}

 

 

 

 

 

 

 

###6F.01.0二、用鼠标实如今场景中拖动物体,用鼠标滚轮实现缩放?

###6F.01.0二、用鼠标实如今场景中拖动物体,用鼠标滚轮实现缩放?

++6F.01.0二、用鼠标实如今场景中拖动物体,用鼠标滚轮实现缩放?

++++立钻哥哥:在场景中添加Plane,Camera,Directional Light,Cube。添加两个脚本ScrollerScript(挂在Camera上),CubeDragScript(挂在Cube上);

++++一、鼠标滚轮实现缩放:将摄像机的镜头拉近或者拉远,调整摄像机的视角就能够实现:

void Update(){

    //鼠标滚轮的效果

    //Camera.main.fieldOfView:摄像机的视野

    //Camera.main.orthographicSize:摄像机的正交投影

 

    //Zoom out

    if(Input.GetAxis(Mouse ScrollWheel) < 0){

        if(Camera.main.fieldOfView <= 100){

            Camera.main.fieldOfView += 2;

        }

 

        if(Camera.main.orthographicSize <= 20){

            Camera.main.orthographicSize += 0.5F;

        }

    }

 

    //Zoom in

    if(Input.GetAxis(Mouse ScrollWheel) > 0){

        if(Camera.main.fieldOfView > 2){

            Camera.main.fieldOfView -= 2;

        }

 

        if(Camera.main.orthographicSize >= 1){

            Camera.main.orthographicSize -= 0.5F;

        }

    }

 

}    //立钻哥哥:void Update(){}

 

++++二、鼠标实如今场景中拖动物体:解决思路就是将世界坐标转换成屏幕坐标,而后计算物体与鼠标之间移动量,循环鼠标被按下操做,获得鼠标的当前位置,加上计算好的移动量,将新的坐标赋值给物理就好了。主要是开启一个协同程序(Coroutine)来处理:

void Start(){

    StartCoroutine(OnMyMouseDown());

}    //立钻哥哥:void Start(){}

 

IEnumerator OnMyMouseDown(){

    //将物体由世界坐标系转换为屏幕坐标系

    Vector3 screenSpace = Camera.main.WorldToScreenPoint(transform.position);

 

    //完成两个步骤:

    //步骤1:因为鼠标的坐标系是二维,须要转换成三维的世界坐标系

    //步骤2:只有三维坐标状况下才能来计算鼠标位置与物理的距离,offset即距离

 

    //将鼠标屏幕坐标转为三维坐标,再算出物体位置与鼠标之间的距离

    Vector3 offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z));

    while(Input.GetMouseButton(0)){

        //获得如今鼠标的二维坐标系位置

        Vector3 curScreenSpace = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenSpace.z);

 

        //将当前鼠标的二维位置转换成三维位置,再加上鼠标的移动量

        Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenSpace) + offset;

 

        //curPosition就是物体应该的移动向量赋给transform的position属性

        transform.positon = curPosition;

    

        yield return new WaitForFixedUpdate();    //这个很重要,循环执行

    }

 

}    //立钻哥哥:IEnumerator OnMyMouseDown(){}

 

 

 

 

 

 

 

 

###6F.01.0三、鼠标左键游戏对象使其旋转?

###6F.01.0三、鼠标左键游戏对象使其旋转?

++6F.01.0三、鼠标左键游戏对象使其旋转?

++++立钻哥哥:

using UnityEngine;

using System.Collections;

 

public class MyDragRotate : MonoBehaviour{

    private bool onDrag = false;    //是否被拖拽

    public float speed = 5f;    //旋转速度

    private float tempSpeed;    //阻尼速度

    private float axisX;    //鼠标沿水平方向移动的增量

    private float axisY;    //鼠标沿垂直方向移动的增量

    private float cXY;    //鼠标移动的距离

 

    //接收鼠标按下的事件

    void OnMouseDown(){

        axisX = 0f;    //为移动的增量赋初值

        axisY = 0f;

    }    //立钻哥哥:void OnMouseDown(){}

 

    //鼠标拖拽时的操做

    void OnMouseDrag(){

        onDrag = true;    //被拖拽

        axisX = Input.GetAxis(Mouse Y);    //获取鼠标增量

        axisY = -Input.GexAxis(Mouse X);

        cXY = Mathf.Sqrt(axisX * axisX + axisY * axisY);    //计算鼠标移动的长度

 

        if(cXY == 0f){

            cXY = 1f;

        }

    }

 

    //Count TempSpeed:计算阻尼速度

    float MyRigid(){

        if(onDrag){

            tempSpeed = speed;

        }else{

            if(tempSpeed > 0){

                //经过除以鼠标移动长度实现拖拽越长速度减缓越慢

                tempSpeed -= speed * 2 * Time.deltaTime / cXY;

            }else{

                tempSpeed = 0;

            }

        }

 

        return tempSpeed;    //返回阻尼的值

    }

 

    void Update(){

        gameObject.transform.Rotate(new Vector3(axisX, axisY, 0) *MyRigid(), Space.World);

 

        if(!Input.GetMouseButton(0)){

            onDrag = false;

        }

    }    //立钻哥哥:void Update(){}

 

}    //立钻哥哥:public class MyDragRotate:MonoBehaviour{}

 

 

 

 

 

 

 

 

###6F.01.0四、写出一我的物角色的有限状态机的简略代码,包括静止、移动、战斗、死亡几个状态的切换?

###6F.01.0四、写出一我的物角色的有限状态机的简略代码,包括静止、移动、战斗、死亡几个状态的切换?

++6F.01.0四、写出一我的物角色的有限状态机的简略代码,包括静止、移动、战斗、死亡几个状态的切换?

++++立钻哥哥:有限状态机(Finite-State machine,FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动做等行为的数学模型。

++++有限状态机(FSM)是游戏AI的一种常见模型

++++FSM的结构和逻辑:

--一、AIController:用于实现各类行为动做,它做为AI行为动做的控制器;

--二、FSM:用于存放判断参数和统一调用各状态机;

--三、IState:状态机接口,等待各类状态机实现其功能;

--四、MoveState,AttackState,IdleState,DieState:各类State,每一个状态机内部实现开关逻辑;

 

++++【一、建立一个AIController】:建立一个AIController,绑定在怪物身上,用于控制怪物动做

public class AIController : MonoBehaviour{

    public FSM fsm;

 

    void Start(){

        fsm = GetComponent<FSM>();

        fsm.ac = this;

    

        //立钻哥哥:初始化一个默认状态机

        fsm.ChangeState(new MoveState());

    }

 

    public void Move(){

        Debug.Log(立钻哥哥:----move----);

    }

 

    public void Attack(){

        Debug.Log(立钻哥哥:----attack----);

    }

 

}    //立钻哥哥:public class AIController:MonoBehaviour{}

 

++++【二、建立一个FSM】:FSM用于传递状态机,建立一个FSM绑定在怪物身上

public class FSM : MonoBehaviour{

    public IState currentState{  get;  private set;  }

    public bool isCanAttack;

    public bool isCanMove;

    public AIController ac;

 

    void Start(){

    }

 

    public void ChangeState(IState newState){

        currentState = newState;

    }

 

    void Update(){

        if(currentState != null && ac != null){

            currentState.Execute(ac);

        }

    }

 

}    //立钻哥哥:public class FSM : MonoBehaviour{}

 

++++【三、建立一个状态机接口:IState】

public interface IState{

    void Execute(AIController ac);

}    //立钻哥哥:public interface IState{}

 

++++【四、建立多个状态机】:在状态机中实现判断和调用AIController的行为方法:

//4.一、MoveState.cs

public class MoveState : IState{

    public void Execute(AIContoller ac){

        if(ac.fsm.isCanMove){

            ac.Move();

        }else{

            ac.fsm.ChangeState(new IdleState());

        }

 

    }    //立钻哥哥:public void Execute(AIController ac)

 

}    //立钻哥哥:public class MoveState:IState{}

 

//4.二、AttackState.cs

public class AttackState : IState{

    public void Execute(AIController ac){

        if(ac.fsm.isCanAttack){

            ac.Attack();

        }else{

            as.fsm.ChangeState(new MoveState());

        }

    }    //立钻哥哥:public void Execute(AIController ac){}

 

}    //立钻哥哥:public class AttackState:IState{}

 

 

 

 

 

###6F.01.0五、稳定排序和不稳定排序?

###6F.01.0五、稳定排序和不稳定排序?

++6F.01.0五、稳定排序和不稳定排序?

++++立钻哥哥:排序,就是整理文件中的记录,使之按关键字递增(或递减)的顺序排列起来;

++++排序算法的稳定性,通俗地讲:就是能保证排序前2个相等的数其在序列的先后位置和排序后它们两个的先后位置顺序相同;

++++常见排序算法稳定性分析:

++++【冒泡排序】:就是把小的元素往前调或者把大的日后调;(是稳定排序算法

++++【选择排序】:给么个位置选择当前元素最小的,好比给第一个位置选择最小的,在剩余位置里面给第二个元素选择第二小的,以此类推,直到第n-1个元素,第n个元素不用选择了,由于只剩下它一个最大的元素了;(不是稳定排序算法

++++【插入排序】:是在一个已经有序的小序列的基础上,一次插入一个元素;(是稳定排序算法

++++【快速排序】:有两个方向,左边的i下标一直往右走,右边的j下标一直往左走;(不是稳定排序算法

++++【归并排序】:是把序列递归地分红短序列,不断合并直到原序列所有排好序;(是稳定排序算法

++++【基数排序】:是按照低位先排序,而后收集;再按照高位排序,而后再收集;以此类推,直到最高位;(是稳定的排序算法

++++【希尔排序】:是按照不一样步长对元素进行插入排序;(不是稳定排序算法

++++【堆排序】不是稳定的排序算法

++++总结:

--稳定排序:冒泡排序、插入排序、归并排序、基数排序

--不稳定排序:选择排序、快速排序、希尔排序、对排序

 

 

 

 

 

###6F.01.0六、欧拉角和四元数理解?

###6F.01.0六、欧拉角和四元数理解?

++6F.01.0六、欧拉角和四元数理解?

++++立钻哥哥:

++++【欧拉角】:就是物体绕坐标系三个坐标轴(x,y,z轴)的旋转角度;

    --欧拉角,优势:三个角度组成,直观,容易理解;缺点:死锁问题

--“heading-pitch-bank”约定:表示物体绕Y轴,X轴,Z轴旋转;

--物体的任何一种旋转均可以分解为绕三个轴的旋转,但分别方式不惟一;

--万向锁的避免方式,限制旋转的角度范围(heading-pitch-bank):

    ----一、heading:绕Y轴,限制范围在+-180度;

    ----二、pitch:绕X轴,限制范围在+-90度;

    ----三、bank:绕Z轴;

++++【四元数】:用于物体的旋转,是一种较为复杂,可是效率较高的旋转方式;

    --四元数,优势:四元旋转不存在万向节死锁问题;缺点:四元数的数字表示不直观

--在三种坐标变换:旋转,平移,缩放当中,旋转应该算是比较复杂的存在;

--使用四元素旋转注意点:

    ----一、用于旋转的四元数必须是单位四元素(即模为1);

    ----二、实际参与旋转的四元数由两个:p和p的逆;

 

 

 

 

 

###6F.01.0七、什么是热更新? Unity如何实现热更新?

###6F.01.0七、什么是热更新? Unity如何实现热更新?

++6F.01.0七、什么是热更新? Unity如何实现热更新?

++++立钻哥哥:热更新:无需关闭服务器,不停机状态下修复漏洞,更新资源等,重点是更新逻辑代码;(iOS热更新:无需将代码从新打包提交至AppStore,便可更新客户端的执行代码,即不用下载app而自动更新程序。)

++++补充:苹果iOS静止了C#的部分反射操做,禁止JIT(即时编译,程序运行时建立并运行新代码),不容许逻辑热更新,只容许使用AssetBundle进行资源热更新;

++++为何要热更新:缩短用户获取新版应用的客户端的流程,改善用户体验;App Store的审核周期难控制;不从新下载、不停机状态下彻底变换一个应用的内容;

++++如何实现热更新:

--一、将执行代码编译为Assemblydll;将代码做为TextAsset打包进AssetBundle

--二、热更新方案:Unity+Lua插件

--三、须要更新的代码、资源,都必须打包成AssetBundle(建议使用未压缩的格式打包)

 

 

 

 

 

###6F.01.0八、UI框架的构建,请描述实现?

###6F.01.0八、UI框架的构建,请描述实现?

++6F.01.0八、UI框架的构建,请描述实现?

++++立钻哥哥:

 

 

 

 

 

###6F.01.0九、NGUI和UGUI的区别对比?

###6F.01.0九、NGUI和UGUI的区别对比?

++6F.01.0九、NGUI和UGUI的区别对比?

++++立钻哥哥:

++++【NGUI】

--NGUI的渲染先后顺序是经过WidgetDepth,而UGUI渲染顺序根据Hierarchy顺序,越下面渲染在顶层;

--NGUI还保留着图集,须要进行图集的维护;而NGUI没有图集的概念,能够充分利用资源,避免重复资源;

--NGUI支持图文混排;UGUI暂未发现支持此功能;

++++【UGUI】

--UGUICanvas有世界坐标和屏幕坐标;

--UGUIImage可使用material;

--UGUI经过Mask来裁剪;而NGUI经过PanelClip

--UGUI不须要绑定CollidersUI能够自动拦截事件;

--UGUIAnchor是相对父对象,没有提供高级选项,操做比NGUI更方便;

--UGUI没有Atlas,使用Sprite Packer

--UGUINavigationScene中能可视化;

--UGUI的事件须要实现事件系统的接口,但写起来也算简单;

--UGUI出现了锚点的概念,更方便屏幕自适应;

--UGUI没有UIWrap来循环scrollView内容;

--UGUI暂时没有Tween组件;

 

 

 

 

 

###6F.01.十、什么是装箱和拆箱?

###6F.01.十、什么是装箱和拆箱?

++6F.01.十、什么是装箱和拆箱?

++++立钻哥哥:装箱(boxing)和拆箱(unboxing)是C#类型系统的核心概念;经过装箱和拆箱操做,可以在值类型和引用类型中架起一座桥梁。

++++C#语言中全部类型都是由基类System.Object继承过来的,就是说全部的事物都是对象;

++++装箱和拆箱是值类型和引用类型之间相互转换时要执行的操做:

--A、装箱在值类型向引用类型转换时发生

--B、拆箱在引用类型向值类型转换时发生

//立钻哥哥:装箱和拆箱分析

 

//A、装箱:

//这行代码将整型常量666赋给object类型的变量obj;

//666是值类型,值类型是放在栈上的;

//object是引用类型,放在堆上;

object obj = 666;

 

//B、拆箱

//代码首先会执行一次装箱操做:将整型数字常量888装箱成引用类型object变量;

//而后执行拆箱操做,将存储在堆上的引用变量obValue存储到局部值类型变量value中

object objValue = 888;

int value = (int)objValue;

 

 

++++执行装箱操做时不可避免的要在堆上申请内存空间,并将栈上的值类型数据复制到申请的堆内存空间上,这确定是要消耗内存和CPU资源的。

++++装箱操做和拆箱操做是要额外耗费CPU和内存资源的,因此在C#2.0以后引入了泛型来减小装箱操做和拆箱操做消耗;

 

 

 

 

 

###6F.01.十一、C#中的Dictionary字典遍历方式?

###6F.01.十一、C#中的Dictionary字典遍历方式?

++6F.01.十一、C#中的Dictionary字典遍历方式?

++++立钻哥哥:Dictionry的遍历方式:

--foreach(var item in myDic){}

--foreach(KeyValuePair<string, int> kv in myDic){}

--foreach(string key in myDic.Keys){}

--foreach(int val in myDic.Values){}

--for(int i = 0;  i < myDic.Count;  i++){}

//立钻哥哥:C#中Dictionary字典遍历方式

 

Dictionary<string, int> myDic = new Dictionary<string, int>();

myDic.Add(立钻哥哥, 666);

 

//A、3.0以上版本

foreach(var item in myDic){

    Console.WriteLine(item.Key + item.Value);

}

 

//B、KeyValuePair<T, K>

foreach(KeyValuePair<string, int> kv in myDic){

    Console.Writeline(kv.Key + kv.Value);

}

 

//C、经过键的集合取

foreach(string key in myDic.Keys){

    Console.WriteLine(key + myDic[key]);

}

 

//D、直接取值

foreach(int val in myDic.Values){

    Console.WriteLine(val);

}

 

//E、采用for方法也能够

List<string> myKeys = new List<string>(myDic.Keys);

for(int i = 0;  i < myDic.Count;  i++){

    Console.WriteLine(myKeys[i] + myDic[myKeys[i]]);

}

 

 

 

 

 

 

###6F.01.十二、NGUI的Sprite和UITexture使用的区别?

###6F.01.十二、NGUI的Sprite和UITexture使用的区别?

++6F.01.十二、NGUI的Sprite和UITexture使用的区别?

++++立钻哥哥:NGUI的三大组件:UILabelUISpriteUITexture,它们三个同时都继承UIWidget

++++【UISprite】NGUI引入图集的概念,不考虑ABA叠层的状况下,一个图集的图片用UISprite,那么它就是一个DrawCall;但一张1024*1024图集就是4M内存;

++++【UITexture】:它彻底没有图集的概念,使用起来很是的灵活,只要把图片挂上去就好了,这样内存只会占用这一张图的大小,内存虽然小,可是DrawCall就上去了;

++++补充:界面中重复性比较高的图片最好打成图集,而一些原画,或者背景图建议直接使用UITexture;(NGUI的图集其实很占用内存,也很占用空间)

 

 

 

 

 

###6F.01.1三、Mono、.Net和L2Cpp分别是什么?

###6F.01.1三、Mono、.Net和L2Cpp分别是什么?

++6F.01.1三、Mono、.Net和L2Cpp分别是什么?

++++立钻哥哥:

++++Unity3D最大的一个特色是:一次制做,多平台部署;而这一核心功能是靠Mono实现的;(Mono是Unity3D核心的核心,是Unity3D跨平台的根本)

++++C#是微软推出的一种基于.NET框架的、面向对象的高级编程语言。(C#C语言和C++派生而来,继承了其强大的性能,同时又以.NET框架类库做为基础,拥有快速开发能力)

++++Mono不只能够运行于Windows系统上,还能够运行于LinuxUnixOSX等;(Mono使得C#这门语言有了很好的跨平台能力

++++IL(Intermediate language)CIL(Common Intermediate Language,特指在.Net平台下的IL标准):中间语言。(它是一种属于通用语言架构和.Net框架的低价(lowest-level)的人类可读的编程语言。)(CIL相似一个面向对象的汇编语言,而且它是彻底基于堆栈的,它运行在虚拟机上(.Net Framework, Mono VM)的语言)

++++C#等遵循CLI规范的高级语言,被先被各自的编译器编译成中间语言:IL(CIL),等到须要真正执行的时候,这些IL会被加载到运行时库,也就是VM虚拟机中,由VM动态的编译成汇编代码(JIT),而后再执行;

++++IL2CPP(将IL再弄回静态的CPP)

--一、Mono VM在各个平台移植,维护很是耗时,有时甚至不可能完成;(不一样新平台,VM就得移植;让WebGL支持Mono的VM几乎不可能)

--二、Mono版本受权受限;(不少C#的新特性没法使用);

--三、提升运行效率;(有1.5~2.0倍的提高)

++立钻哥哥:使用Mono的时候,脚本的编译运行

++++3大脚本被编译成IL,在游戏运行的时候,IL和项目里其余第三方兼容的DLL一块儿,放入Mono VM虚拟机,由虚拟机解析成机器码,而且执行;

 

 

++立钻哥哥:IL2CPP编译运行(红色部分是IL2CPP作的改变)

++++在获得中间语言IL后,使用IL2CPP将他们从新变回C++代码,而后再由各个平台的C++编译器直接编译成执行的原生汇编代码;

 

++++一、将IL变回CPP的目的除了CPP的执行效率快之外,还能够利用现成的在各个平台的C++编译器对代码执行编译器优化,这样能够进一步减少最终游戏的尺寸并提升游戏运行速度;

++++二、因为动态语言的特性,程序员无需关心内存管理,全部的内存分配和回收都由GC(Garbage Collector)组件完成;(经过IL2CPP之后代码变成了静态的C++,可是内存管理这块仍是遵循C#的方式,最后还要有一个IL2CPP VM:它负责提供诸如GC管理,线程建立这类的服务性工做。 因为去除了IL加载和动态解析的工做,使得IL2CPP VM能够作的很小,而且使得游戏载入时间缩短;)

+++三、因为C++是一门静态语言,这就意味着咱们不能使用动态语言的那些炫酷特性。(运行时生成代码并执行确定是不可能的)(Unity的AOT(Ahaed Of Time)编译,非JIT(Just In Time)编译)

 

 

 

 

 

 

 

###6F.01.1四、六、八、十、1四、14,有什么规律?

###6F.01.1四、六、八、十、1四、14,有什么规律?

++6F.01.1四、六、八、十、1四、14,有什么规律?

++++立钻哥哥:规律是:单数+4;双数+3;

 

 

 

 

 

###6F.01.1五、四个数1,5,5,5,用加减乘除算出结果24,每一个数字只能用一次?

###6F.01.1五、四个数1,5,5,5,用加减乘除算出结果24,每一个数字只能用一次?

++6F.01.1五、四个数1,5,5,5,用加减乘除算出结果24,每一个数字只能用一次?

++++立钻哥哥:24 = 5 * (5 - 1/5)

 

 

 

 

 

###6F.01.1六、Unity文件是如何保存引用关系的? .meta文件到底有什么做用,这里边包含了什么内容?

###6F.01.1六、Unity文件是如何保存引用关系的? .meta文件到底有什么做用,这里边包含了什么内容?

++6F.01.1六、Unity文件是如何保存引用关系的? .meta文件到底有什么做用,这里边包含了什么内容?

++++立钻哥哥:Unity中每一个资源文件都会对应生成一个.meta文件;

++++.meta文件是用来区分项目中不一样资源的;

++++Unity引用的资源都会生成对应的惟一的GUID,用来标示这些资源。(GUID是按照必定策略生成的,可是在不一样的机器上可能生成的并不一致。)(作版本控制的时候,必定要保证.meta文件的一致)

++++.meta文件记录了一些对应资源很是重要的信息。(好比:Texture.meta会有相关mipmapsbumpmaptextureFormat等信息)

++++提示:隐藏.meta文件状态:【Edit -> Project Settings -> Editor】=>【Version control:Hidden Meta Files】

fileFormatVersion: 2

guid: 7cf05f955a098834990e145a1f74d29d

timeCreated: 1483457126

licenseType: Pro

TextureImporter:

  fileIDToRecycleName: {}

  serializedVersion: 2

  mipmaps:

  bumpmap:

  textureSettings:

  spriteSheet:

  spritePackingTag:

  userData:

  assetBundleName:

  assetBundleVariant:

 

 

 

 

 

 

###6F.01.1七、为何使用多个Unity的摄像机这个功能可能很是重要?

###6F.01.1七、为何使用多个Unity的摄像机这个功能可能很是重要?

++6F.01.1七、为何使用多个Unity的摄像机这个功能可能很是重要?

++++立钻哥哥:在同一场景中同一方向上使用多个摄像机,很容易创造很是震撼的视觉效果,这些效果是一个摄像机很难完成的;

++++在Unity渲染场景的时候,须要大量的重要信息被设置好:

--A、要渲染的物体的列表;(每一个摄像机只会渲染那些对它来讲是可见的物体以及那些实际在指定摄像机可见的层上的物体;)

--B、摄像机的视角(以及摄像机的位置、旋转、缩放、视野、裁剪等等)

++++剔除遮罩:使用层有选择地渲染一组对象。(【Culling Mask: Everything】

++++摄像机的顺序和清理屏幕:

--在渲染场景的内容到颜色缓冲区和深度缓冲区以前,摄像机能够清除两个缓冲区的内容或者单独清理深度缓冲区的内容。默认:【Clear Flags: Skybox】:将颜色缓冲区的内容清除到天空盒的缓冲区里面去;

++++提示:若是想要移动某个摄像机的话,可能须要一次移动全部的摄像机(能够将全部的摄像机做为一个游戏物体的子对象)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

++立钻哥哥推荐的拓展学习连接(Link_Url)

++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/

++++Unity面试题ABChttp://www.javashuo.com/article/p-mwacxwca-gm.html

++++Unity面试题Dhttp://www.javashuo.com/article/p-wuwcrclr-s.html

++++Unity面试题Ehttp://www.javashuo.com/article/p-hmabbtmc-ba.html

++++Unity面试题Fhttp://www.javashuo.com/article/p-olslkfao-cq.html

++++Unity知识点0001http://www.javashuo.com/article/p-ryvdxxjr-ep.html

++++Unity知识点0008http://www.javashuo.com/article/p-kxgstxls-gu.html

++++Unity引擎基础http://www.javashuo.com/article/p-beommoeb-ka.html

++++Unity面向组件开发http://www.javashuo.com/article/p-eigmuvut-dt.html

++++Unity物理系统http://www.javashuo.com/article/p-nqvvciwv-kd.html

++++Unity2D平台开发http://www.javashuo.com/article/p-ycaagdtj-hs.html

++++UGUI基础http://www.javashuo.com/article/p-rukxwckw-mc.html

++++UGUI进阶http://www.javashuo.com/article/p-wcatruhq-gt.html

++++UGUI综合http://www.javashuo.com/article/p-dkccmqii-gg.html

++++Unity动画系统基础http://www.javashuo.com/article/p-mbrdouxy-dq.html

++++Unity动画系统进阶http://www.javashuo.com/article/p-aqaqpbkh-bp.html

++++Navigation导航系统http://www.javashuo.com/article/p-dswwllas-t.html

++++Unity特效渲染http://www.javashuo.com/article/p-ckojjyfj-bp.html

++++Unity数据存储http://www.javashuo.com/article/p-bvlzynso-m.html

++++Unity中Sqlite数据库http://www.javashuo.com/article/p-ejutsbxl-ca.html

++++WWW类和协程http://www.javashuo.com/article/p-dbwmhsav-cy.html

++++Unity网络http://www.javashuo.com/article/p-sqrlntgh-dw.html

++++C#事件http://www.javashuo.com/article/p-zmwruvql-gm.html

++++C#委托http://www.javashuo.com/article/p-uozpymaf-gh.html

++++C#集合http://www.javashuo.com/article/p-sfqfdqsf-ex.html

++++C#泛型http://www.javashuo.com/article/p-xrttqngo-ee.html

++++C#接口http://www.javashuo.com/article/p-vhlfplgv-dm.html

++++C#静态类https://blog.csdn.net/vrunsoftyanlz/article/details/78630979

++++C#中System.String类http://www.javashuo.com/article/p-olslkfao-cq.html

++++C#数据类型http://www.javashuo.com/article/p-hmabbtmc-ba.html

++++Unity3D默认的快捷键http://www.javashuo.com/article/p-wuwcrclr-s.html

++++游戏相关缩写http://www.javashuo.com/article/p-mwacxwca-gm.html

++++设计模式简单整理http://www.javashuo.com/article/p-rngqugib-hg.html

++++专题:设计模式(精华篇)http://www.javashuo.com/article/p-nbohnaya-hw.html

++++U3D小项目参考https://blog.csdn.net/vrunsoftyanlz/article/details/80141811

++++UML类图http://www.javashuo.com/article/p-sxberuew-bm.html

++++U3D_Shader编程(第一篇:快速入门篇)http://www.javashuo.com/article/p-kyppgrac-gz.html

++++U3D_Shader编程(第二篇:基础夯实篇)http://www.javashuo.com/article/p-qkyowtli-hv.html

++++框架知识点http://www.javashuo.com/article/p-eufbowgf-u.html

++++游戏框架(UI框架夯实篇)http://www.javashuo.com/article/p-cvemoigb-cu.html

++++游戏框架(初探篇)http://www.javashuo.com/article/p-zfpoilbc-hy.html

++++Lua快速入门篇(基础概述)http://www.javashuo.com/article/p-shernvtt-u.html

++++Lua快速入门篇(XLua教程):http://www.javashuo.com/article/p-pduvmusb-ho.html

++++Lua快速入门篇(Xlua拓展):http://www.javashuo.com/article/p-rrszijom-cm.html

++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/

 

 

--_--VRunSoft:lovezuanzuan--_--