本文由@唐三十胖子出品,转载请注明出处。
文章链接:https://blog.csdn.net/iceSony/article/details/83047008这篇文章将总结和提炼《游戏架构核心技术与面试精粹》的第二章“玩法底层”的内容。
通过这篇文章,你可以知道
1)常见的生命周期函数有哪些?不同函数的使用场景?
2)什么是游戏帧率?U3D中有几类时间?
3)事件与动画如何匹配?
4)帧同步与状态同步的优劣?
一.常见的生命周期函数有哪些?不同函数的使用场景?
Awake—>OnEnable–>Start—>Update—>FixedUpdate—>LateUpdate—>OnGUI—>OnDisable—>OnDestroy
Awake函数,最先执行,直到物体激活才被调用,注意这里是物体激活,脚本不激活也会调用Awake,只会调用一次
OnEnable函数,当对象变为可用或者激活状态时被调用一次
Start函数,函数仅在Update函数第一次被调用前调用。在整个生命周期中也只是被调用一次,但是和Awake不同的是,Start函数只在脚本实例被启动的时候调用
Update函数,当脚本启动之后,会在每一帧中都被调动,在这函数中可以更新游戏的状态,是游戏实现中非常常用的函数
FixedUpdate函数,该函数也是脚本启动后的每一帧都会被调用,但是与Update不同的是,FixedUpdate函数是专门用力处理Rigidbody,比如给刚体加一个力的作用。还有一个需要注意的是,FixedUpdate函数和Update函数的帧率是不一样的。受到fixedtimestep影响
LateUpdate函数,跟Update函数一样,也是每一帧都被调用。有一个特点就是,LateUpdate函数是在所有Update函数调用后才调用的,可以用于调整脚本的执行顺序。常用于摄像头
ONGUI函数,渲染和处理GUI事件的时候调用,这意味着你的OnGUI程序将会在每一帧被调用。要得到更多的GUI事件的信息查阅Event手册。如果Monobehaviour的enabled属性设为false,OnGUI()将不会被调用。
OnDisable函数,与OnEnable函数相反,OnDisable函数在对象变为不可用或者非激活状态时被调用,可以在此函数中做相关资源的释放。
OnDestroy函数,当脚本被销毁的时候被调用。
二.什么是游戏帧率?U3D中有几类时间?
帧率
游戏渲染一次的时间 60fps:1帧为1/60s
Time.realtimeSinceStartup:真实游戏时间线,以真实时间作为参考
TimeLine:游戏时间线,受间隔时间影响
Time.time
Time.timeScale:时间间隔为0.5则,真实时间过了2s,实际游戏中过了1s
所以我们开发中,常用timeScale*speed表达速度
注意:当你的scale调小,帧率不会改变,所以相同时间脚本会被调用多次
三.事件与动画如何匹配?
动画播放中伴随着其他需求,比如声音的播放,特效的创建等
在动画选项中有一项:event
注意这里的人物中要添加脚本,event function要添加对应的代码
当然了你也可以根据动画的播放时长在脚本中添加
4.帧同步与状态同步的优劣?
状态同步传递计算结果,帧同步传递计算数值
帧同步本地运算,所以需要注意值的精确,不同客户端之间的坐标偏移了0.01造成角色的扣血,那么不同客户端的结果也就不同
状态同步消耗的流量大,且延迟高于帧同步,不适用于moba游戏常见于mmo游戏
介绍一个概念锁帧:也就是客户端没有收到消息则不进行同步,反应的是画面不渲染