I see it on documentation but I am confused as to the syntax and how it can be applied, can I get some examples referring to syntax ?
The input parameters are passed by reference (&), also known as an out parameter.
What that means, is that any values passed to the function will be modified.
In short, you need to create 2 variables you can pass into the function, call the function with those 2 variables, and the function will modify those 2 variables values.
So something like:
float DeltaX = 0.f;
float DeltaY = 0.f;
GetInputMouseDelta(DeltaX, DeltaY);
Now DeltaX’s and DeltaY’s values have changed to whatever.
EDIT: Also, “Delta” is a keyword of sorts in Unreal Engine, and it refers to “since last frame”. DeltaTime is the time since last frame, so DeltaX and DeltaY will be the X and Y since last frame.
There’s a really good explanation on pointers and references on reddit. Comment by RoyAwesome.
Okay I tried that , but it just gave me an error that it was undefined, I have it in an actor file and I added the player controller header file and everything, but that doesn’t work. For more clarification, I want to make a rotatable and then when I turn my camera I want the value of the camera to affect the rotation. This is what I tried to make work:
void AInteractBase::BeginPlay()
{
Super::BeginPlay();
FTimeline FCurveTimeline;
UCurveFloat* CurveFloat;
FRotator StartLoc;
FRotator EndLoc;
float ZOffset;
float MouseY = 0.0f;
float MouseX = 0.0f;
GetInputMouseDelta(MouseX, MouseY);
FOnTimelineFloat TimelineProgress;
TimelineProgress.BindUFunction(this, FName("TimelineProgress"));
FCurveTimeline.AddInterpFloat(CurveFloat, TimelineProgress);
FCurveTimeline.SetLooping(true);
StartLoc = EndLoc = GetActorRotation();
EndLoc.Yaw += MouseY;
FCurveTimeline.PlayFromStart();
void AInteractBase::TimelineProgress(float Value)
{
//value between distances
FRotator NewLocation = FMath::Lerp(StartLoc, EndLoc, Value);
SetActorRotation(NewLocation);
}
But it does not compile and just throws an error that GetInputMouseDelta is undefined
But it does not compile and just throws an error that GetInputMouseDelta is undefined
GetInputMouseDelta is a function inside the PlayerController class. You need to call it from a PlayerController.
I am assuming that you are making an interactable object. In that case, do you have a reference to the Character interacting with the object? If you do, you can get the PlayerController from the Character and call GetMouseInputDelta from the PlayerController.
So something like:
ACharacter* Char; (You need to figure out how to get this yourself or share more of your code)
APlayerController* PC = Char->GetPlayerController();
PC->GetInputMouseDelta(MouseX, MouseY);
Remember to cast the PlayerController to your PlayerController class, if you have a custom one.
Excuse my late replies, I spent my time trying to figure this out. But I did what you said, I referenced my character and casted the playercontroller, take a look:
class APlayerCharacter;
class UCurveFloat;
UCLASS()
class Rotatable_API AInteractBase : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor’s properties
AInteractBase();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
UFUNCTION()
void TimelineProgress(float Value);
FTimeline FCurveTimeline;
UPROPERTY(EditAnywhere,Category = "Movement")
UCurveFloat* CurveFloat;
UPROPERTY()
FRotator StartLoc;
UPROPERTY()
FRotator EndLoc;
APlayerCharacter* Person;
APlayerController* PC = Person->GetPlayerController();
};
I get error “error C2059: syntax error: ‘=’” and “error C2238: unexpected token(s) preceding ‘;’”. Can you show me what I have done wrong?