Unity

  1. 函数生命周期
点击查看代码
Awake->OnEnable->Start->FixedUpdate->Update->LateUpdate->OnDisable->Ondestory;
* Awake:场景开始的时候调用一次。
* OnEnable:启用对象后调用,可以重复调用。
* Start:对象第一次启用是调用,用于初始化。
* FixedUpdate:用于更新物理逻辑,频率超过update。
* Update:每帧调用一次。*Time.deltaTime。
* LateUpdate:摄像机位置更新。
* OnDisable:隐藏对象后立即调用,可能重复。
* OnDestroy:摧毁时调用,用于最终的清理和资源释放。

2.什么是进程线程协程?区别是什么?

点击查看代码
进程
* 进程是操作系统中独立的执行单位,每个进程都有自己独立的内存空间和系统资源。
* 进程之间相互独立,无法直接共享内存,相互通信需要特殊的机制:管道,消息队列等。
* 每个进程都有自己的地址空间,因此进程间数据隔离性较好。
* 进程的启动切换销毁需要较大的开销,因此进程创建切换比较慢。
线程
* 是进程中的一个执行单元,多个线程共享同一个进程的内存空间和系统资源。
* 线程之间可以直接访问共享内存,因此线程通信较为简单,但是要注意线程安全。
* 线程共享进程的地址空间,因此线程间的数据共享和通信比较方便。
* 线程的创建切换销毁开销比较小,因此线程创建和切换比较快

协程
* 是一个轻量级的线程,可以在程序中执行多个执行流程,不同于线程,协程是由程序员自己管理,不依赖于操作系统的线程调度。
* 可以在同一个线程内多个执行流程切换,不需要线程切换,因此开销小。
* 通常用于异步操作,事情处理等场景,可以有效提高程序的并发性和响应性。

综上所述,进程是操作系统分配资源基本单位,线程是操作系统调度执行的最小单位,而协程是程序员自己管理的轻量级执行流程,区别于:资源分配,通信方式,数据隔离和开销。
3. 物体发生碰撞的必要条件
点击查看代码
两者必须要有碰撞体,如boxcollider。
4. 触发器和碰撞器的区别
点击查看代码
碰撞器用于检测物体碰撞,会产生物理效果,改变运动状态。(collider)
触发器也是碰撞器,但不会产生物理效果,用于检测物体进入和离开(triger)
5. 有几种施加力的方式?
点击查看代码
* Rigidbody.Addforce()//这种力可以是持续性的,也可以是瞬时的。
Rigidbody rb=GetComponent<Rigidbody>();
rb.Addforce(Vector3.forward*forceAmount);
* Rigidbody.AddTorque()//旋转力
Rigidbody rb=GetComponent<Rigidbody>();
rb.AddTorque(Vector3.up*torqueAmount);
* 直接改变velocity属性可以加速度。
rb.velocity=new Vector3(velocityX,velocityY,velocityZ);
* Rigidbody.MovePosition()//位置
rb.MovePosition(rb.position+Vector3.forward*speed*Time.deltaTime);
6. 动画分层
点击查看代码
用来管理不同身体部位的复杂状态机。可以将不同的动画逻辑分组处理。
7.动画类型有几种,及其原理
点击查看代码
* 关键帧动画:在动画序列的关键帧中记录各个顶点的原位置及其改变量,然后通过插值运算实现动画效果
* 骨骼动画:谷歌按照角色的特点组合成一定的层次结构,有关节相连,通过对骨骼的变换实现动画效果,而皮肤在骨骼之外,用来决定外观
* 关节动画:将角色分为若干部分,每一部分对应一个网格模型,部分的动画连成一个整体的动画,通过改变模型顶点的变化来进行插值播放。
  1. 什么是FSM有限状态机
点击查看代码
将对象的行为抽象成一系列状态,对象在不同状态之间转换,从而实现不同的行为和动作
* 状态:对象可能处于各种状态,每个状态都有对应的行为和过度条件
* 转换:状态之间的转换条件
* 行为:对象在待定条件下的行为或动作
* 状态机:管理状态和状态之间的转换
  1. 什么是LOD?
点击查看代码
根据距离,动态调整模型细节。
优点:提高性能,节省资源
缺点:需要不同细节层次的模型,可能会产生肉眼可见的模型过度效果,占用内存
  1. MipMap?
点击查看代码
针对纹理贴图资源。
  1. DrawCall
点击查看代码
CPU向GPU发送指令来渲染
* 合批:静态和动态
* 使用纹理集:小纹理合并到大纹理
* 使用GPUInstancing:允许使用相同的网格和材质实例化多个物体
* 减少透明物体:
* 优化UI渲染:尽量保持在一个画布

12.常用的特性和技术

点击查看代码
* 物理引擎(Physics Engine):Unity内置了强大的物理引擎,可以模拟物体之间的碰撞、重力、摩擦等物理效果。
* 图形渲染(Graphics Rendering):Unity提供了先进的图形渲染功能,包括基于物理的渲染(Physically Based Rendering,PBR)、光照和阴影、后处理效果等,可以创建高质量的视觉效果。
* 动画系统(Animation System):Unity的动画系统支持骨骼动画、顶点动画、物理动画等多种动画类型,可以创建生动的角色和物体动画。
* 粒子系统(Particle System):Unity的粒子系统可以创建各种特效,如火焰、烟雾、爆炸等,丰富游戏场景的表现力。
* 碰撞检测(Collision Detection):Unity提供了灵活的碰撞检测功能,可以检测物体之间的碰撞,并触发相应的事件。
* 脚本编程(Scripting):Unity支持使用C#、JavaScript等编程语言编写脚本,可以控制游戏对象的行为、交互和逻辑。
* UI系统(UI System):Unity的UI系统提供了丰富的UI元素和控件,可以创建用户界面、菜单、按钮等,方便构建用户友好的游戏界面。
* 音频系统(Audio System):Unity可以处理游戏中的音频效果和音乐,包括声音的播放、混音和空间化等功能。
* 网络功能(Networking):Unity提供了多种网络功能,包括实现本地多人游戏和在线多人游戏的功能。
* 资源管理(Asset Management):Unity的资源管理功能可以管理游戏中的各种资源,包括模型、纹理、声音、动画等。
13. 寻路怎么设计
点击查看代码
用unity自带的Navmesh进行导航寻路
或者自己动手设计
* 格子系统:将地图划分为n个格子,然后标记格子
* 导航图: 创建点和边,。
* 网格:使用多边形网格来表示地形
然后通过路径查找算法:A*
  1. A*
点击查看代码
1.初始化开放列表(Open List,用于存放可能的行进路径)。
2.将起点加入开放列表。
3.如果开放列表不为空,从中取出f(n)值最小的节点作为当前节点。
4.检查当前节点是否为终点,如果是,则回溯路径并结束搜索。
5.如果不是终点,对当前节点的每个邻居进行评估并更新f(n),然后加入开放列表。
6.重复步骤3到5。

15.image和rawImage区别

点击查看代码
image用sprite,而rawimage用texture
rawimage通常作为视频播放或者网络图片显示
posted @ 2024-10-14 13:28  doudouqie66  阅读(12)  评论(0编辑  收藏  举报