Beteendeförändring för Vector2.Lerp och Vector4.Lerp
Implementeringen av Vector2.Lerp(Vector2, Vector2, Single) och Vector4.Lerp(Vector4, Vector4, Single) ändrades till korrekt konto för ett flyttalsrundningsfel.
Ändra beskrivning
Vector2.Lerp(Vector2, Vector2, Single) Tidigare och Vector4.Lerp(Vector4, Vector4, Single) implementerades som value1 + (value2 - value1) * amount
. Men på grund av ett flyttalsrundningsfel returnerar value2
den här algoritmen inte alltid när amount
är 1.0f
.
I .NET 5 och senare använder implementeringen samma algoritm som Vector3.Lerp(Vector3, Vector3, Single), som är (value1 * (1.0f - amount)) + (value2 * amount)
. Den här algoritmen står korrekt för avrundningsfelet. Nu, när amount
är 1.0f
, är resultatet exakt value2
. Den uppdaterade algoritmen gör också att algoritmen kan optimeras fritt med när MathF.FusedMultiplyAdd den är tillgänglig.
Version introducerad
5,0
Rekommenderad åtgärd
Ingen åtgärd krävs. Men om du vill behålla det gamla beteendet kan du implementera din egen Lerp
funktion som använder den tidigare algoritmen value1 + (value2 - value1) * amount
för .