我在堆棧數學網站上發佈了這個問題,但他們並不太興奮,看不到包括編程在內的問題。不管怎樣,現在我在這裏:)Unity3D從V1到V2的線性插值
- 我有一個對象,它位於MyTransform.position(矢量)
- 該對象應遵循DesiredPosition(矢量),其是 在雜色山雀方向上移動具有變化速度
- MaxDelayDistance(浮點)是我的目的是允許 具有對DesiredPosition的最大距離。
- DelayRecovery(float)是我的對象在達到MaxDelayDistance時將 移動到DesiredPosition的秒數。
- Time.deltaTime(float)是一個術語,我們用它來描述最後一次 幀更新所花費的時間。它的價值通常約爲0.025f。
private Vector3 GetLerpedPosition(Vector3 DesiredPosition) {
//DesiredPosition now contains the goal
Vector3 dirToDesiredPosition = (DesiredPosition - MyTransform.position).normalized; //Direction to desired position
Vector3 lerpStart = DesiredPosition + (-dirToDesiredPosition * MaxDelayDistance); //Start the lerp at my farthest allowed position
float lerpCurrentT = Vector3.Distance(MyTransform.position, DesiredPosition)/Vector3.Distance(lerpStart, DesiredPosition); //My current fragtion (t) of the lerp
//Now I lerp from lerpStart to DesiredPosition using a calculated fraction
Vector3 result = Vector3.Lerp(
lerpStart,
DesiredPosition,
lerpCurrentT + (DelayRecovery/MaxDelayDistance * Vector3.Distance(MyTransform.position, DesiredPosition) * Time.deltaTime)
);
return result;
}
主要的問題是,我的對象不順利繼DesiredPosition。 它從MaxDelayDistance跳轉到DesiredPosition並返回。 不知何故,我的Lerp函數中的分數(t)總是大約爲1.005或大約0.001。你能在我的方法中發現任何問題嗎?
如果我正確理解你的目標,你可以通過計算'dirToDesiredPosition',跟蹤某個值'distanceMoved'來增加每一幀,然後將該對象移動到'lerpStart + dirToDesiredPosition * distanceMoved'來獲得更一致的結果。 – rutter