创建和NPC的对话窗体
我们需要创建一个继承自HUD的类
UCLASS()
class CPLUSLEARN_API AMyHUDMessage : public AHUD {
public : };
void AMyHUDMessage::DrawHUD() {
DrawText(\欢迎来到虚幻的世界!!\, FVector2D(0, 0), hudFont, FVector2D(1, 1), DrawLine(200, 300, 400, 500, FLinearColor::Blue); Super::DrawHUD();
virtual void DrawHUD() override;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = HUDFont) UFont *hudFont; GENERATED_BODY()
FColor::White); }
我们在自己的HUD的类中定义了一个字体,并且在界面上绘出一个线框和文字
重新编译项目,我们进入UE4中,创建一个继承自MyHUD的蓝图类,同时设置我们自己的字体信息。最后在我们的游戏模式中将默认的HUD改成我们自己创建的HUD
下面我们要用一个一个列表来存放这些对话的信息,我们打开自己创建的C++的HUD类
void AMyHUDMessage::DrawHUD() {
//DrawLine(200, 300, 400, 500, FLinearColor::Blue); Super::DrawHUD();
}
void AMyHUDMessage::addMessage(Message msg) { }
messages.Add(msg); }
//当该条消息的时间小于0的时候将该条信息移除 if (messages[c].time < 0) { }
messages.RemoveAt(c);
//时间逐步缩减
messages[c].time -=GetWorld()->GetDeltaSeconds();
//使用字体绘制出我们的信息(信息,颜色,宽度+边距,高度+边距,字体)
DrawText(messages[c].message, messages[c].color, x + pad, y + pad, hudFont);
//绘制出背景
DrawRect(FLinearColor::Black, x, y, Canvas->SizeX, messageH);
float messageH = outputHeight + 2.f*pad;//信息的高度就是输出高度+2倍的间隔 float x = 0.f, y = c*messageH;
for (int c = messages.Num() - 1; c >= 0; c--) {
float outputWidth, outputHeight, pad = 10.f; //定义输出的宽度高度和间隔
//获取出信息内容大小
GetTextSize(messages[c].message, outputWidth, outputHeight, hudFont, 1.f); //DrawText(\
下面我们必须要完成我们的NPC实体
UCLASS()
class CPLUSLEARN_API ANonePla