物理帧和渲染帧分开,目的就是确保 逻辑的 同步性,ab两个客户端 pk,手机性能不同,虽然服务端同时发送,但不能由于a手机配置低,卡了,致使跟不上。性能
虽然 作了跳帧处理,但加速 不必定要让渲染帧也加速,不然 手机 性能更不上,仍是卡。因此必须让 逻辑渲染分开。spa
逻辑帧 一秒 6--10次,渲染帧 一秒 60.目前安卓是这样,苹果多是30.code
若是把 人物角色放在 逻辑帧里,那么 动做看起来就不流畅,因此要放到 渲染帧里面,具体以下。orm
void OnSetPK() { //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// int count = GModel.getInstance.list.Count; //添加 英雄 for (int i = 0; i < count; i++) { hero hr = GModel.getInstance.list[i]; hr.OnAddHero();//添加英雄 } //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// int counts = GModel.getInstance.list.Count;// //删除 没有血英雄 for (int i = 0; i < counts; i++) { hero hr = GModel.getInstance.list[i]; hr.OnDestroyHero();//删除英雄 } //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// int countt = GModel.getInstance.list.Count;// //处理逻辑英雄 for (int i = 0; i < countt; i++) { hero hr = GModel.getInstance.list[i]; hr.OnFrame();//处理英雄 }
建立英雄 删除英雄 英雄逻辑处理,必须是在 逻辑帧里面 统一管理。对象
先 查看 当前帧 有没有须要 建立的,其次是血量不够要删除的,最后是 现有的 英雄逻辑处理。blog
在英雄对象 里面,要作一个 跟踪。由于逻辑帧不流畅,放到update里面作,不知道下一步位置,那么就要用 跟踪方式。ci
void Update() { float newPositionX = Mathf.SmoothDamp(transform.position.x, vec.x, ref xVelocity, smoothTime); float newPositionY = Mathf.SmoothDamp(transform.position.y, vec.y, ref yVelocity, smoothTime); transform.position = new Vector3(newPositionX, newPositionY, 11); }
大概如上,这样只要跟的紧,不会让 玩家看出 有没有碰到。get
最后效果如图,拖拽后,前面是 白色后面是彩色卡牌,白色卡牌 是逻辑帧,只要碰撞就可,如今显示为了你们看清。同步
后面的彩色卡牌是 渲染帧里面执行。能够发现,白色 每次一大步,但看起来卡,彩色每次一小步但流畅。玩家到时 只看到彩色。但发生碰撞或逻辑,it
程序都按白色卡牌来计算,他们 走的 很近,偏差忽略不计,也能够经过速度调整,让更快的 移动能跟的 更近。这样,就算手机卡,我能够关闭渲染帧,逻辑跳帧继续执行,而后等跳帧结束,我再打开渲染帧,那时渲染帧 虽然离 逻辑帧 更远,但他只执行 最后 目标,因此 很快就 看起来天然了。