3D游戲開發之在UE4中創建非玩家角色(NPC)


 

接着上節我們繼續學習,現在我們來創建一些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的效果:

未完待續

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM