壓UE4嶄耶紗当弉乾窟並周
<貧匯准
和匯准>
匯、壓HUD嶄?塋章虜?
1) 壓MyHUD.h嶄協吶匯倖潤更栖燕幣厘断議嶧連?
#pragma once
#include "GameFramework/HUD.h"
#include "MyHUD.generated.h"
//乎潤更悶燕幣厘断勣?塋承掴虜∧悔?
struct Message
{
FString m_Message; //嶧連坪否
float m_Time; //?塋承鎚閏?
FColor m_Color; //猟云議冲弼
Message() : m_Time(6.0f), m_Color(FColor::White) //潮範奉來
{
}
Message(FString message, float time, FColor color)
:m_Message(message), m_Time(time), m_Color(color)
{
}
};
2) 耶紗嶧連方怏。UE4嶄喘TArray栖燕幣強蓑方怏?咀緩繍厘断議AMyHUD窃俐個撹?
UCLASS()
class DEMO1_API AMyHUD : public AHUD
{
GENERATED_UCLASS_BODY()
public:
// 和中宸倖嶷墮痕方耽屐氏瓜距喘匯肝?壓宸倖痕方議協吶戦中栖籌半忖悶
virtual void DrawHUD() override;
void AddMessage(Message msg);
// 耶紗忖悶奉來?昧朔厘断壓清夕園辞匂嶄譜崔忖悶窃侏?
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = HUDFont) UFont* hudFont;
private:
TArray<Message> m_Messages;
};
貧中協吶阻匯倖燕幣嶧連議TArray方怏?輝嗤嶧連勣瓜?塋承鎚浦鬘ix?簗躰啜集段闓蛄弌5姥地虜⊂V鎣牧散諒閏篋麩虜■しかくx融甦?TArray方怏嶄評茅。嗤購TArray議岑紛?朔中匆氏写偬初府。壓AMyHUD.cpp嶄耶紗泌和旗鷹?
#include "Demo1.h"
#include "MyHUD.h"
AMyHUD::AMyHUD(const class FObjectInitializer& PCIP) : Super(PCIP)
{
}
void AMyHUD::DrawHUD()
{
// 枠距喘幻窃DrawHUD()痕方
Super::DrawHUD();
// 貫朔吏念亨旗方怏?宸劔恂議挫侃頁辛參閲窒評茅匯倖圷殆哈軟咀葎輝念議亨旗匂涙丼哈軟議危列
for (int i = m_Messages.Num() - 1; i >= 0; --i)
{
float outputWidth, outputHeight, pad = 10.0f; //pad頁猟云才嶧連崇議寂鉦
//和中議痕方功象忖悶才忖悶寄弌柴麻輝念宸粁嶧連議錐業、互業?喘噐柴麻凪嶧連崇議錐業才互業
GetTextSize(m_Messages[i].m_Message, outputWidth, outputHeight, hudFont, 1.0f);
float messageH = outputHeight + 2.0f*pad;
float x = 0.0f, y = i*messageH;
//菜弼嘘尚
DrawRect(FLinearColor::Black, x, y, Canvas->SizeX, messageH);
DrawText(m_Messages[i].m_Message, m_Messages[i].m_Color, x + pad, y + pad, hudFont);
// 嶧債?塋省閏?
m_Messages[i].m_Time -= GetWorld()->GetDeltaSeconds();
//泌惚?塋省閏簟冢?塚蝪ix?簟導?
if (m_Messages[i].m_Time < 0)
{
m_Messages.RemoveAt(i);
}
}
}
void AMyHUD::AddMessage(Message msg)
{
m_Messages.Add(msg);
}
屈、壓NPC嶄耶紗乾窟並周
葎阻斑厘断真除NPC嘉?塋抄垰或鬘n卉俳菻ť棺38燦橳判派?ミリ患津沆果縡ť麭撒禝津沆穏佯胆桓豌睚之饋申?NPC。厘断氏幹秀匯倖寄議白悶淫律廖NPC?宸劔輝厘断真除NPC万祥氏恬竃郡哘旺?塋章虜?歆粥?1) 壓NPC.h猟周嶄耶紗泌和旗鷹?
#pragma once
#include "GameFramework/Character.h"
#include "NPC.generated.h"
UCLASS()
class DEMO1_API ANPC : public ACharacter
{
GENERATED_UCLASS_BODY()
public:
//壓朕村Collision和幹秀白悶奉來?昧侃辛需?清夕峪響??喘噐真除NPC議当弉悶殊霞
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Collision)
USphereComponent* ProxSphere;
//壓朕村NPCMessage和幹秀忖憲堪奉來?昧侃辛需?清夕辛響亟?
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = NPCMessage)
FString NpcMessage;
//俊除NPC扮距喘乎痕方
UFUNCTION(BlueprintNativeEvent, Category = "Collision")
void Prox(AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 otherBodyIndex, bool bFromSweep,
const FHitResult & SweepResut);
};
2) 壓NPC.cpp嶄耶紗泌和旗鷹?
#include "Demo1.h"
#include "NPC.h"
#include "Avatar.h"
#include "MyHUD.h"
ANPC::ANPC(const class FObjectInitializer& PCIP)
: Super(PCIP),
ProxSphere(PCIP.CreateDefaultSubobject<USphereComponent>(this, TEXT("Proximity Sphere"))),
NpcMessage("Hi!!") //譜崔潮範嶧連?遇拝万頁辛參壓UE4嶄瓜園辞議
{
//委白悶薮栽欺功怏周?宸劔白悶祥氏効昧彭NPC
ProxSphere->AttachTo(RootComponent);
//譜崔白悶磯抄
ProxSphere->SetSphereRadius(200.0f);
//繍殊霞真除白悶効Prox痕方序佩嶷京鰯協。輝白悶嚥凪麿actor嗤住我扮祥氏距喘Prox痕方
ProxSphere->OnComponentBeginOverlap.AddDynamic(this, &ANPC::Prox);
}
//廣吭?埋隼厘断議遊猟周嶄蕗苧頁ANPC::Prox()?徽頁宸戦勣亟ANPC::Prox_Implementation
//輝白悶嚥凪麿actor窟伏嶷京扮祥氏距喘乎痕方
void ANPC::Prox_Implementation(AActor* otherActor, UPrimitiveComponent* otherComp, int32 otherBodyIndex, bool bFromSweep,
const FHitResult & sweepResult)
{
//宥狛膿崙廬算撹AAVatar頁倦撹孔栖登僅頁倦螺社叔弼
if (Cast<AAvatar>(otherActor) == nullptr)
{
return;
}
//資誼及匯繁各陣崙匂
APlayerController* PController = GetWorld()->GetFirstPlayerController();
if (PController)
{
//資誼HUD順中
AMyHUD* hud = Cast<AMyHUD>(PController->GetHUD());
hud->AddMessage(Message(NpcMessage, 5.f, FColor::White));
}
}
眉、塰佩
恷朔低辛參園咎心心徭失議旗鷹頁倦短嗤諒籾?泌惚短嗤諒籾?壓嬉蝕議UE4園辞匂嶄泣似塰佩?耽輝低真除匯倖NPC?恣貧叔祥氏?塋焼簣虜■しかくh舅騨舎秫升?
<貧匯准
和匯准>