Il FMath::FInterpConstantTo interpola il float dalla Posizione attuale al Target desiderato con un andamento costante.
FMath::FInterpConstantTo, Riferimenti
Module Core
Header /Engine/Source/Runtime/Core/Public/Math/UnrealMathUtility.h
Include #include "Math/UnrealMathUtility.h"
Source /Engine/Source/Runtime/Core/Private/Math/UnrealMath.cppSintassi:
static float FInterpConstantTo
(
float Current,
float Target,
float DeltaTime,
float InterpSpeed
)- Current: il valore di partenza da cui si desidera iniziare l’interpolazione.
- Target: il valore di destinazione a cui si desidera arrivare.
- DeltaTime: il tempo trascorso tra un frame e l’altro, solitamente ottenuto dal frametime del gioco.
- InterpSpeed: la velocitĂ di interpolazione, che determina quanto rapidamente l’oggetto si sposterĂ verso il valore di destinazione.
La funzione restituirĂ il nuovo valore interpolato che può essere utilizzato per aggiornare l’oggetto o il parametro desiderato.
Esempio sulla rotazione
Nella classe corrente di MioScript.h:
private: float TargetYaw = 90.f; float InitialYaw = 0.f; float CurrentYaw;
MioScript.cpp:
// Called every frame
void UMioScript::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
{
      Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
      // HERE BEGIN CODE
      CurrentYaw = GetOwner()->GetActorRotation().Yaw;
      FRotator OpenDoor(0.f, TargetYaw, 0.f);
      /*
      Change Yaw of OpenDoor     Â
      StartingYaw
      TargetYaw: CurrentYaw
      0-1
      */
      OpenDoor.Yaw = FMath::FInterpConstantTo(CurrentYaw, TargetYaw, DeltaTime, 45);
      GetOwner()->SetActorRotation(OpenDoor);
}Questo è un esempio di codice all’interno di una funzione TickComponent di una classe chiamata UMioScript, che estende la classe base AActorComponent in Unreal Engine. Questa funzione viene chiamata ad ogni frame per aggiornare il componente.
Ecco una descrizione linea per linea del codice:
Super::TickComponent(DeltaTime, TickType, ThisTickFunction);– Questa chiamata richiama l’implementazione della classe base per assicurarsi che la logica di aggiornamento di base venga eseguita correttamente.CurrentYaw = GetOwner()->GetActorRotation().Yaw;– Questa riga ottiene l’angolo di rotazione attuale (yaw) dell’oggetto proprietario del componente e lo assegna alla variabile CurrentYaw.FRotator OpenDoor(0.f, TargetYaw, 0.f);– Qui viene creato un oggetto FRotator chiamato OpenDoor con valori predefiniti di roll e pitch pari a 0 e un valore di yaw impostato sulla variabile TargetYaw.OpenDoor.Yaw = FMath::FInterpConstantTo(CurrentYaw, TargetYaw, DeltaTime, 45);– Questa riga utilizza la funzione FMath::FInterpConstantTo per calcolare un nuovo valore di yaw per l’oggetto OpenDoor. L’interpolazione costante viene utilizzata per spostare gradualmente il valore di CurrentYaw verso il valore di TargetYaw con una velocitĂ di interpolazione di 45 unitĂ al secondo. Il risultato viene quindi assegnato a OpenDoor.Yaw.GetOwner()->SetActorRotation(OpenDoor);– Questa riga imposta la rotazione dell’oggetto proprietario del componente sul valore di OpenDoor, applicando la rotazione calcolata nell’interpolazione costante.
In sostanza, questo codice viene utilizzato per creare un’animazione di transizione fluida della rotazione di un oggetto nel tempo. Ad ogni frame, la funzione TickComponent calcola un nuovo valore di rotazione per l’oggetto, spostandolo gradualmente da CurrentYaw a TargetYaw utilizzando l’interpolazione costante. Infine, viene impostata la nuova rotazione sull’oggetto.
Un altro esempio
Ed ecco un altro esempio di utilizzo della funzione FMath::FInterpConstantTo per interpolare un valore da 0 a 100 con una velocitĂ di 50 unitĂ al secondo:
float StartValue = 0.0f;
float TargetValue = 100.0f;
float InterpolationSpeed = 50.0f;
// Nel tuo ciclo di gioco o aggiornamento
float DeltaTime = ...; // Ottenere il tempo trascorso tra un frame e l'altro
float InterpolatedValue = FMath::FInterpConstantTo(StartValue, TargetValue, DeltaTime, InterpolationSpeed);
// Usa InterpolatedValue per aggiornare l'oggetto o il parametro desideratoQuesta funzione è molto utile quando si desidera creare animazioni o transizioni fluide tra valori nel corso del tempo, senza accelerazioni o decelerazioni.





0 commenti