基础知识大串讲

这里会记录可能问到的基础知识,也是对我所学的一个复习回顾。

C#相关

  1. 委托和事件是什么?使用事件对比直接使用函数调用有什么优势?
  • 委托和事件:
    • 委托和事件是存有方法引用的类型,他们的区别在于事件是委托的安全包裹,只能在声明它的类内部执行Invoke();外部仅可+=-=函数。
  • 优势:
    • 降低耦合度。使用事件实际上是设计模式中观察者模式的体现,发布者不必关注订阅者的逻辑行为,订阅者在换逻辑时也只需注意加减函数,不必修改大量逻辑。
    • 访问更安全。外部不可Invoke()
    • 支持一对一广播,触发式全部自动执行。
  1. 泛型的作用,举例说明。
  • 泛型的作用:
    • 复用代码逻辑
    • 避免装箱拆箱
  • 例子:List<T>
  1. 接口和抽象类的核心区别?
  • 关键字:接口interface,抽象类abstract class
  • 成员:接口默认无字段、不能有实例变量;抽象类可以有字段、属性、构造函数
  • 继承:一个类只能继承一个抽象类,但是可以实现多个接口
  • 设计:接口强调能做什么、抽象类强调是什么

Unity相关

  1. MonoBehaviour的完整生命周期,说说Awake()Start()的区别,Update()FixedUpdate()的区别。
  • 生命周期:Awake -> OnEnable -> Start -> FixedUpdate -> Update -> LateUpdate -> OnDisable -> OnDestory
  • Awake()Start()的区别:
    • Awake():在物体被实例化时执行,即使脚本失活也能执行。用于初始化赋值。所有物体的Awake()执行完后,才会开始执行Start()
    • Start():在Awake()之后,Update()第一帧开始前执行,必须当脚本被激活时才能执行。常用于需要等待其他数据的逻辑上。
  • Update()FixedUpdate()LateUpdate()的区别:
    • Update():每帧执行,帧间隔不固定。用于处理普通业务逻辑。比如物体移动、摄像机移动
    • FixedUpdate():按照固定时间间隔执行,不受帧率影响。用于处理与物理相关的逻辑。
    • LateUpdate():所有Update()执行完毕后才运行。常用于跟随逻辑(相机跟随角色、挂件跟随主体),避免Update物体移动完相机滞后错位。
  1. 方向向量和位置向量的区别
  • 方向向量:只关心方向,不关心起点终点。可以用两点坐标相减得到。
  • 位置向量:是从世界原点指向空间某物体位置的向量,用来记录一个点在哪。是物体的transform.position