Trigger 如何設定觸發條件
我設了一個 Trigger Box,想說當玩家走進這個空間就顯示提示圖片目前測試結果,當玩家走進來是沒問題顯示提示圖片沒問題
但問題是當敵人也走進來的時候也會顯示,不知如何修改
判定只有玩家進入才會觸發
///////////////// AManual_Trigger.h /////////////////
#include "CoreMinimal.h"
#include "Engine/TriggerBox.h"
#include "Manual_Trigger.generated.h"
UCLASS()
class ACTGAME_API AManual_Trigger : public ATriggerBox
{
GENERATED_BODY()
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// constructor sets default values for this actor's properties
AManual_Trigger();
// overlap begin function
UFUNCTION()
void OnOverlapBegin(class AActor* OverlappedActor, class AActor* OtherActor);
// overlap end function
UFUNCTION()
void OnOverlapEnd(class AActor* OverlappedActor, class AActor* OtherActor);
// Reference UMG Asset in the Editor
UPROPERTY(EditAnywhere)
TSubclassOf<class UUserWidget> HelpWidgetClass;
// declare widget
class UUserWidget* InfoWidget;
};
///////////////// AManual_Trigger.cpp /////////////////
#include "Manual_Trigger.h"
#include "DrawDebugHelpers.h"
#include "Blueprint/UserWidget.h"
AManual_Trigger::AManual_Trigger()
{
//Register Events
OnActorBeginOverlap.AddDynamic(this, &AManual_Trigger::OnOverlapBegin);
OnActorEndOverlap.AddDynamic(this, &AManual_Trigger::OnOverlapEnd);
}
void AManual_Trigger::BeginPlay()
{
Super::BeginPlay();
DrawDebugBox(GetWorld(), GetActorLocation(), GetActorScale() * 100, FColor::Cyan, true, -1, 0, 5);
}
void AManual_Trigger::OnOverlapBegin(AActor * OverlappedActor, AActor * OtherActor)
{
InfoWidget = CreateWidget<UUserWidget>(GetWorld(), HelpWidgetClass);
if (OtherActor && (OtherActor != this))
{
InfoWidget->AddToViewport();
}
}
void AManual_Trigger::OnOverlapEnd(AActor * OverlappedActor, AActor * OtherActor)
{
if (OtherActor && (OtherActor != this))
{
InfoWidget->RemoveFromViewport();
}
}
看不懂,只会用蓝图On Actor Begin Overlap 事件 一般我们可以把 OtherActor 再细化一下。
比如你的玩家是你创建的 APlayer 类,可以
APlayer * myPlayer = Cast<APlayer>(OtherActor);
if (myPlayer && (myPlayer != this))
{
InfoWidget->AddToViewport();
}
如果有多个同样的类型,比如多个 ATank 类的敌人,那你可以在编辑器里给每个 Tank 分配
一个唯一的 Tag,然后用 ActorHasTag() 函数在游戏中查询
http://api.unrealengine.com/INT/API/Runtime/Engine/GameFramework/AActor/ActorHasTag/index.html
if (OtherActor && (OtherActor != this))
{
if (OtherActor->ActorHasTag(TEXT("BossTank")))
{
InfoWidget->RemoveFromViewport();
}
}
组件 ,接口 ,actor tag 和 componet tag, 多态 tag 有辦法在C++中先預設嗎,我打算先在操作腳色,先加上TAG 「PLAYER」
目前找到的語法是 ComponentTags.Add(FName("PLAYER"));
但試了一直無法直接加上,可以請教該如何設嗎 我的命名是 CharacterBase.h 虽然我只是用蓝图,但其实只要你把玩家和敌人的tag 分开,或姐 弄两个属性(玩家和敌人)这样,你的对像目标只对玩家有效就好 通过属于玩家类还是怪物类
页:
[1]