接着上節咱們繼續學習,如今咱們來建立一些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的效果: