我创建了一个LaunchPad actor C++类,该类由Cube静态网格物体组件和UBox组件编译而成。到目前为止,一旦角色与点击框重叠,它将触发ALaunchPad::OnBoxBeginOverlap中的任何内容。我目前正在尝试告诉您,当角色重叠时,UBox会在空中类似地将它们发射到Blueprints“LaunchCharacter”节点。
LaunchPad.cpp
void ALaunchPad::OnBoxBeginOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{
GEngine->AddOnScreenDebugMessage(-1, 15.0f, FColor::Yellow, TEXT("Character Launched!"));
Asgd240_1115350_core5Character::LaunchCharacter(FVector(0, 0, velocity), false, true);
}
LaunchPad.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "LaunchPad.generated.h"
UCLASS()
class SGD240_1115350_CORE5_API ALaunchPad : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
ALaunchPad();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
void OnBoxBeginOverlap(UPrimitiveComponent * HitComp, AActor * OtherActor, UPrimitiveComponent * OtherComp, FVector NormalImpulse, const FHitResult & Hit);
UPROPERTY(VisibleAnywhere)
class UBoxComponent* Collide;
UFUNCTION()
void OnBoxBeginOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);
UPROPERTY(EditAnywhere)
float velocity;
UFUNCTION()
void LaunchCharacter();
};
目前,我正在接受“非静态成员引用必须相对于特定对象,并且不会编译。有任何想法吗?
最佳答案
将OtherActor
转换为ACharacter
,然后调用其LaunchCharacter
方法:
void ALaunchPad::OnBoxBeginOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor,
UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep,
const FHitResult& SweepResult)
{
GEngine->AddOnScreenDebugMessage(-1, 15.0f, FColor::Yellow, TEXT("Character Launched!"));
ACharacter* OtherCharacter = Cast<ACharacter>(OtherActor);
if (OtherCharacter != nullptr)
{
OtherCharacter->LaunchCharacter(FVector(0, 0, velocity), false, true);
}
}