Vector3.Slerp的使用

1.Vector3.Slerp是指球形插值。官网用法如下
  1. //在日出和日落之间动画弧线  
  2. usingUnityEngine;  
  3. usingSystem.Collections;  
  4.    
  5. publicclass example : MonoBehaviour   
  6. {  
  7.         publicTransform sunrise;  
  8.         publicTransform sunset;  
  9.         voidUpdate()   
  10.         {  
  11.                 //弧线的中心  
  12.                 Vector3 center = sunrise.position + sunset.position *                 0.5f;  
  13.                 //向下移动中心,垂直于弧线  
  14.                 center -= newVector3(0, 1, 0);  
  15.                 //相对于中心在弧线上插值  
  16.                 Vector3 riseRelCenter = sunrise.position - center;  
  17.                 Vector3 setRelCenter = sunset.position - center;  
  18.                 transform.position = Vector3.Slerp(riseRelCenter,  
  19.                                       setRelCenter, Time.time);  
  20.                 transform.position += center;  
  21.         }  
 
 
对于此例子进行解析,插值的时候需要设定圆心。可按照上面的固定模式来,而圆心的位置可以根据自己的情况去修改 12-14行代码。
2.另外需要注意的是最后一步位置值又加了一次圆心坐标。这里是为了将插值偏移到空间中圆心的周围。
如果没有这一步,会因为riseRelCenter,setRelCenter只表示方向,而将插值算到原点周围。
所以最后一步要注意。
3.通过测试
带循环时
for(int j = 0; j < 10; j++)
{
Vector3 center = (pos1 + pos2) * 0.5f;
center -= new Vector3(0, 0.5f, 0);
Vector3 vecA = pos1 - center;
Vector3 vecB = pos2 - center;
Vector3 drawVec = Vector3.Slerp(vecA, vecB, 0.1f * j);
if(j == 4)
print(drawVec.ToString("0.0000"));
 
}
 
还有不带循环时
Vector3 center = (pos1 + pos2) * 0.5f;
center -= new Vector3(0, 0.5f, 0);
Vector3 vecA = pos1 - center;
Vector3 vecB = pos2 - center;
Vector3 drawVec = Vector3.Slerp(vecA, vecB, 0.1f * 4);
print(drawVec.ToString("0.0000"));
 
结果在0.4 的时候是一致的。即我们可以根据情况直接选取某些单独的值,这里跟mathf.Lerp有些区别。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值