接着上节咱们继续学习,如今咱们来建立一些NPC(non-playable characters,非玩家角色)。在这个游戏中,当咱们靠近NPC时,它们会作出相应的反应。浏览器
1) 在UE编辑器中,打开文件-新建C++类,选择从Character(角色)类继承,而后命名子类为NPC。编辑器
2) 编写代码。打开NPC.h文件:
添加头文件:(注意包含头文件必须在#include "NPC.generated.h"这一行前面加)ide
#include "UObjectGlobals.h"
在原来的代码基础上添加以下代码:函数
public: //在目录Collision下建立球体属性(随处可见,蓝图只读),该属性用做碰撞体 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Collision) USphereComponent* ProxSphere; //在目录NPCMessage下建立字符串属性(随处可见,蓝图可读写) UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = NPCMessage) FString NpcMessage;
说明:FString是UE4的专用字符串类型,当你在UE4中开发游戏中,应该优先使用FString而不是STL里面的String。由于UE4的FString等内置类型保证了跨平台功能。工具
3) 从新编译UE4项目。学习
1) 在内容浏览器,右击NPC类,而后从这里建立一个蓝图类。注意给每一个蓝图类都命名一个独有的名字,由于以后咱们给不一样的NPC赋予不一样的模型网格和不一样的消息。字体
2) 如今打开蓝图编辑器,选择从添加组件中选择Mesh网格,而后在细节面板更改Skeletal Mesh(骨骼网格)为SK_Mannequin。ui
3) 像以前同样调整胶囊碰撞体到适合位置。spa
4) 在组件面板中选择蓝图自身。而后在默认选项卡,找到NpcMessage属性。这是从咱们C++代码中建立的属性而且能够在蓝图中应用。在UPROPERTY()函数里面添加了一个NpcMessage的字符串变量,而且指定了在蓝图类中可读写,因此在细节面板中能够进行编辑了。3d
5) 你能够继续建立一个NPC蓝图类(或者直接从原来的NPC蓝图类中复制一个新的蓝图类),而且能够分别设置不一样的NPCMessage。接着将这两个蓝图类拖动到场景中。
接下来咱们讲解如何将每一个NPC自身的消息在游戏中显示给玩家看。
为了展现对话框,咱们须要自定义一个HUD(heads-up display,即平视显示器)。
什么是HUD?
HUD是平面显示界面,就是平时咱们玩3D游戏提供给玩家的2D菜单界面。HUD类提供了渲染文字、贴图、矩形和材质的渲染,建立后也能够经过蓝图来编辑。
1) 点击文件-新建C++类;(简单的步骤咱们就再也不截图了,相信你们也都知道怎么操做了)
2) 选择从HUD类继承来建立咱们本身的类;
3) 给你的类命名,在我这里命名为MyHUD。建立好后就会自动打开VS开发环境。
在MyHUD.h中里面添加以下代码:
UCLASS() class MYFIRSTCODE_API AMyHUD : public AHUD { GENERATED_BODY() public: // 添加字体属性(随后咱们在蓝图编辑器中设置字体类型) UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = HUDFont) UFont* hudFont; // 下面这个重载函数每帧会被调用一次,在这个函数的定义里面来渲染字体 virtual void DrawHUD() override; };
在MyHUD.cpp中添加以下代码:
void AMyHUD::DrawHUD() { // 先调用父类DrawHUD()函数 Super::DrawHUD(); // 接下来就渲染东西 // 下面是画一条从(200,300)到(400,500)的蓝线: DrawLine(200, 300, 400, 500, FLinearColor::Blue); // 下面写一行文字(参数分别为文字、位置、字体、缩放、颜色): DrawText("UE4 is very interesting!", FVector2D(0, 0), hudFont, FVector2D(1, 1), FColor::White); }
1) 点击工具栏的蓝图-游戏模式-HUD:HUD-建立-MyHUD,来建立一个蓝图类,名字改成BP_MyHUD。
2) 在右侧的细节面板中选择字体:
3) 保存退出,而后打开以前建立的游戏模式的蓝图类:
4) 在HUD class中选择BP_MyHUD做为咱们的默认HUD。
最后,你能够运行来看看HUD的效果: