- 函数生命周期
点击查看代码
Awake->OnEnable->Start->FixedUpdate->Update->LateUpdate->OnDisable->Ondestory;
* Awake:场景开始的时候调用一次。
* OnEnable:启用对象后调用,可以重复调用。
* Start:对象第一次启用是调用,用于初始化。
* FixedUpdate:用于更新物理逻辑,频率超过update。
* Update:每帧调用一次。*Time.deltaTime。
* LateUpdate:摄像机位置更新。
* OnDisable:隐藏对象后立即调用,可能重复。
* OnDestroy:摧毁时调用,用于最终的清理和资源释放。
2.什么是进程线程协程?区别是什么?
点击查看代码
进程
* 进程是操作系统中独立的执行单位,每个进程都有自己独立的内存空间和系统资源。
* 进程之间相互独立,无法直接共享内存,相互通信需要特殊的机制:管道,消息队列等。
* 每个进程都有自己的地址空间,因此进程间数据隔离性较好。
* 进程的启动切换销毁需要较大的开销,因此进程创建切换比较慢。
线程
* 是进程中的一个执行单元,多个线程共享同一个进程的内存空间和系统资源。
* 线程之间可以直接访问共享内存,因此线程通信较为简单,但是要注意线程安全。
* 线程共享进程的地址空间,因此线程间的数据共享和通信比较方便。
* 线程的创建切换销毁开销比较小,因此线程创建和切换比较快
协程
* 是一个轻量级的线程,可以在程序中执行多个执行流程,不同于线程,协程是由程序员自己管理,不依赖于操作系统的线程调度。
* 可以在同一个线程内多个执行流程切换,不需要线程切换,因此开销小。
* 通常用于异步操作,事情处理等场景,可以有效提高程序的并发性和响应性。
综上所述,进程是操作系统分配资源基本单位,线程是操作系统调度执行的最小单位,而协程是程序员自己管理的轻量级执行流程,区别于:资源分配,通信方式,数据隔离和开销。
点击查看代码
两者必须要有碰撞体,如boxcollider。
点击查看代码
碰撞器用于检测物体碰撞,会产生物理效果,改变运动状态。(collider)
触发器也是碰撞器,但不会产生物理效果,用于检测物体进入和离开(triger)
点击查看代码
* 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);
点击查看代码
用来管理不同身体部位的复杂状态机。可以将不同的动画逻辑分组处理。