接着上節我們繼續學習,現在我們來創建一些NPC(non-playable characters,非玩家角色)。在這個游戲中,當我們靠近NPC時,它們會做出相應的反應。
一 創建C++類
1) 在UE編輯器中,打開文件-新建C++類,選擇從Character(角色)類繼承,然后命名子類為NPC。
2) 編寫代碼。打開NPC.h文件:
添加頭文件:(注意包含頭文件必須在#include "NPC.generated.h"這一行前面加)
#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。
3) 像之前一樣調整膠囊碰撞體到適合位置。
4) 在組件面板中選擇藍圖自身。然后在默認選項卡,找到NpcMessage屬性。這是從我們C++代碼中創建的屬性並且可以在藍圖中應用。在UPROPERTY()函數里面添加了一個NpcMessage的字符串變量,並且指定了在藍圖類中可讀寫,所以在細節面板中可以進行編輯了。
5) 你可以繼續創建一個NPC藍圖類(或者直接從原來的NPC藍圖類中復制一個新的藍圖類),並且可以分別設置不同的NPCMessage。接着將這兩個藍圖類拖動到場景中。
接下來我們講解如何將每個NPC自身的消息在游戲中顯示給玩家看。
三 UE4創建平視顯示器(HUD)
為了展示對話框,我們需要自定義一個HUD(heads-up display,即平視顯示器)。
什么是HUD?
HUD是平面顯示界面,就是平時我們玩3D游戲提供給玩家的2D菜單界面。HUD類提供了渲染文字、貼圖、矩形和材質的渲染,創建后也可以通過藍圖來編輯。
創建HUD子類
1) 點擊文件-新建C++類;(簡單的步驟我們就不再截圖了,相信大家也都知道怎么操作了)
2) 選擇從HUD類繼承來創建我們自己的類;
3) 給你的類命名,在我這里命名為MyHUD。創建好后就會自動打開VS開發環境。
在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的效果:
未完待續