1.3 Unity基础

一、生命周期函数!!

Awake —> OnEnable —> Start —> FixedUpdate —>Update —> LateUpdate—> OnGUl —> OnDisable —> OnDestroy

主要执行顺序

编辑器->初始化->物理系统->输入事件->游戏逻辑->场景渲染->GUI渲染->物体激活或禁用->销毁物体->应用结束

主要函数介绍

Reset:点击编辑器面板的Reset按钮或者首次添加该组件时被调用

Awake:用于在游戏开始之前初始化游戏变量或游戏状态,在脚本整个生命周期仅调用一次,当脚本设置为不可用时,运行时Awake仍会执行一次。Awake在所有对象被初始化之后调用,所以可以安全的和其他对象对话或者用GameObject.FindWithTag来搜索。每个游戏物体上的Awake随机调用。因此应该用Awake设置脚本间的引用,并用Start来传递信息。Awake总是在Start之前被调用,它不能用来执行协程。

OnEnable:当对象变为可用时调用。在同一周期中可以反复地发生!

Start:只在脚本示例被启用时调用一次。

FixedUpdate:固定帧调用(?)渲染帧执行,渲染效率低下的话渲染次数也会下降,处理Rigidbody。

Updete:每帧调用。

LateUpdate:在Update之后每帧调用,用于更新游戏场景和状态,和摄像机相关的更新。

OnGUI:每帧调用好几次(每个事件一次)渲染和处理GUI事件时调用。如果enabled属性设为false,OnGUI()将不会被调用。

OnDisable:不能用于协程,当对象变为不可用或非激活状态时调用。

OnDestroy:当对象被销毁时调用。

OnApplicationQuit:当用户停止运行模式时在编辑器中调用。当web被关闭时在网络播放器中被调用。

记顺序:AES→三个Update→PQDD

1.3 Unity基础_第1张图片

感谢作者:【Unity】Unity 生命周期-CSDN博客

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

碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性。

当Is Trigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数;

当Is Trigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果,可以调用OnTriggerEnter/Stay/Exit函数。

如果既要检测到物体的接触又不想让碰撞检测影响物体移动或要检测一个物件是否经过空间中的某个区域这时就可以用到触发器。

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

两个物体都必须带有碰撞器Collider,其中一个物体还必须带有Rigidbody刚体。

四、Net与Mono的关系?

mono是.net的一个开源跨平台工具,就类似java虚拟机,java本身不是跨平台语言,但运行在虚拟机上就能够实现了跨平台。
.net只能在windows下运行,mono可以实现跨平台编译运行,可以运行于Linux,Unix,Mac OS等。

五、Unity提供了几种光源,分别是什么?

  • 平行光:Directional Light
  • 点光源:Point Light
  • 聚光灯:Spot Light
  • 区域光源:Area Light

六、简述四元数Quaternion的作用,四元数对欧拉角的优点?

1.四元数

是一种数学结构,用来表达旋转运动。一个四元数通常由一个实部和三个虚部构成,可以表示为q=a+bi+cj+dk,其中a是实部,b、c、d是虚部,i、j、k是虚数单位。

2.欧拉角

是一种常用的旋转表达方法,常用于描述物体的朝向和旋转。欧拉角可以分为三个分量,分别是绕xyz轴的旋转角度。

四元数⽤于表示旋转,对旋转⻆度进⾏计算时⽤到四元数
相对欧拉⻆的优点:
1)能进⾏增量旋转
2)避免万向锁
3)给定⽅位的表达⽅式有两种,互为负(欧拉⻆有⽆数种表达⽅式)

七、CharacterController和Rigidbody的区别?

Rigidbody具有完全真实物理的特性,而CharacterController可以说是受限的的Rigidbody,具有一定的物理效果但不是完全真实的。

八、localPosition 与 Position 的使用区别?

localPosition :自身坐标系,相对于父级的位置
Position :世界坐标系中的位置

九、简述prefab的用处

在游戏运行时实例化,prefab相当于一个模板,对你已经有的素材、脚本、参数做一个默认的配置,主要用于经常会用到的物体做成一个集合方便反复使用,以便于以后的修改,同时prefab打包的内容简化了导出的操作,便于团队的交流。

十、简述进程、线程、协程的概念

1.进程

  • 保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己独立的地址空间,有自己的堆,不同进程间可以进行进程间通信,上级挂靠单位是操作系统。一个应用程序相当于一个进程,操作系统会以进程为单位,分配系统资源(CPU 时间片、内存等资源),进程是资源分配的最小单位。

2.线程

  • 线程从属于进程,也被称为轻量级进程,是程序的实际执行者。线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。一个线程只有一个进程。
  • 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口,但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
  • 线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的)。

3.协程

  • 协程是伴随着主线程一起运行的一段程序。
  • 协程与协程之间是并行执行,与主线程也是并行执行,同一时间只能执行一个协程提起协程,自然是要想到线程,因为协程的定义就是伴随主线程来运行的。
  • 一个线程可以拥有多个协程,协程不是被操作系统内核所管理,而完全是由程序所控制。
  • 协程和线程一样共享堆,不共享栈,协程由程序员在协程的代码里显示调度。
  • 协程是单线程下由应用程序级别实现的并发。

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