- //在日出和日落之間動畫弧線
- usingUnityEngine;
- usingSystem.Collections;
- publicclass example : MonoBehaviour
- {
- publicTransform sunrise;
- publicTransform sunset;
- voidUpdate()
- {
- //弧線的中心
- Vector3 center = sunrise.position + sunset.position * 0.5f;
- //向下移動中心,垂直於弧線
- center -= newVector3(0, 1, 0);
- //相對於中心在弧線上插值
- Vector3 riseRelCenter = sunrise.position - center;
- Vector3 setRelCenter = sunset.position - center;
- transform.position = Vector3.Slerp(riseRelCenter,
- setRelCenter, Time.time);
- transform.position += center;
- }
- }
Vector3.Slerp的使用
1.Vector3.Slerp是指球形插值。官網用法如下
對於此例子進行解析,插值的時候需要設定圓心。可按照上面的固定模式來,而圓心的位置可以根據自己的情況去修改 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有些區別。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.