赞
踩
首先简单举例几个适用情况呐。
A:物体从a-b,如何平滑的到达b点
B:物体旋转90,如何平滑
首先按照情况先给答案后续进行解析为什么:
- void Awake()
- {
-
- StartCoroutine(RotateCam());
- }
-
- IEnumerator RotateCam()
- {
- while(gameObject.transform.rotation!=qu)
- {
- yield return new WaitForFixedUpdate();//帧执行
- //这是旋转
- //首先通过该记录1我们的目标位置
- qu = gameObject.transform.rotation * Quaternion.AngleAxis(angle, Vector3.up);
-
- gameObject.transform.rotation = Quaternion.Lerp(gameObject.transform.rotation, qu, 0.1f);
- //这是位移
- mainCam.transform.position = Vector3.Lerp(mainCam.transform.position, offset + player.transform.position, 0.1f);
- }
- }
lerp主要有三个参数(常用)
lerp(start , end , OneExecutePer )
start:初始状态
end:目标状态
OneExecutePer:每一次执行靠近的度是多少(如果是1,也就是说执行一次就会达到目标)
如果是0.5,第一次执行就会完成1/2的路程,因为start和end靠近了1/2的路程,所以下一次执行就会靠近1/4(他们的距离变短了一半),简单说每次只走我们距离的一半。
以后的数据就是1/8,1/16。。。
这么来说是达不到最终目的地的(理想状态下),当无限靠近的过程中因为精度比如float只有六位小数,当差距小于这个的时候就会停止调用。、
使用携程有一个坏处如果在运行过程中又被调用了,他前面的会被刷新,导致前面的没有执行完成。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。