在本教程的過程中,我們會創建新的 虛幻引擎 項目,向其添加新的C++類,然后編譯項目並添加新類的實例到關卡中。 在完成后,我們會看到以C++來編程的 Actor 在屏幕上的移動。
步驟
-
從啟動程序中打開 虛幻引擎 。 項目瀏覽器將會出現。
-
點擊 New Project(新建項目) 選項卡,然后選擇 C++ 選項卡。 在該處選擇 Basic Code(基礎代碼) ,這樣我們可以獲得全新的起始點,確認設置了 "With Starter Content(和入門內容共同啟動)"。 我們需要輸入項目名稱,就使用"QuickStart"吧。 現在可以點擊Create Project(創建項目) 並開始了。
Unreal Editor(虛幻編輯器) 現在將會打開新項目。 Visual Studio 也會打開,並載入項目剛創建的解決方案文件。
2. 創建C++類
-
在 Unreal Editor(虛幻編輯器) 中,我們可以使用 Add Code to Project(添加代碼到項目) 命令來創建新的C++類,它位於File(文件) 下拉菜單中。
-
此時將會打開 Choose Parent Class(選擇父類) 菜單。 由於 Actor 是能夠存在於 Unreal Engine(虛幻引擎) 層面的最為基礎的類,我們將會把 Actor 類作為基類。
-
此時將會打開 Name Your New Actor(命名您的新Actor) 菜單。 對這個示例來說,讓我們輸入名稱"FloatingActor",然后點擊Create Class(創建類) 。
現在我們已經創建了一個C++類,我們可以切換到 Visual Studio 來對它編程。 FloatingActor.cpp
將會自動打開, Unreal Engine(虛幻引擎) 會自動編譯並使用我們的新類來重新載入代碼。
3. 寫入並編譯C++代碼
-
在 Visual Studio 中,我們會使用 Solution Explorer(解決方案瀏覽器) 面板來搜尋新建的C++文件。 在我們的示例中,它們被命名為
FloatingActor.cpp
和FloatingActor.h
,並且將被放置於"QuickStart"項目中。我們要開始寫代碼了。 本教程中所有的代碼可用於完成本頁面的所有指示,您可以在頁面的底部位置找到它們。
-
在
FloatingActor.h
中,我們會在文件末尾處的終止大括號和分號之前添加以下代碼:floatRunningTime;
-
切換到
FloatingActor.cpp
,我們會在 AFloatingActor::Tick 底部的終止大括號前添加以下代碼:FVectorNewLocation=GetActorLocation();floatDeltaHeight=(FMath::Sin(RunningTime+DeltaTime)-FMath::Sin(RunningTime));NewLocation.Z +=DeltaHeight*20.0f;//把高度以20的系數進行縮放RunningTime+=DeltaTime;SetActorLocation(NewLocation);
我們剛寫的代碼會導致 FloatingActors 平滑地上下跳動,使用我們創建的 RunningTime 變量來隨時間追溯移動的軌跡。
-
現在編碼完成了,我們可以通過在 Solution Browser(解決方案瀏覽器) 中右鍵點擊項目並選擇 Build(編譯) 命令,或通過點擊Unreal Editor(虛幻編輯器) 的 Compile(編譯) 按鈕來進行編譯。 編譯成功后, 虛幻引擎 會自動載入我們的變更內容。
(在 Visual Studio 中)
(在 虛幻編輯器 中)
我們現在可以基於代碼來在 虛幻引擎 中創建物體了! 所有本頁面中使用的代碼都在下方,以供您參考。
Finished Code
FloatingActor.h
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.#pragma once #include"GameFramework/Actor.h"#include"FloatingActor.generated.h" UCLASS()class QUICKSTART_API AFloatingActor:publicAActor{ GENERATED_BODY()public:// 設置此actor屬性的默認值AFloatingActor();// 當游戲開始或生成時調用virtualvoidBeginPlay()override;// 在每一幀調用virtualvoidTick(floatDeltaSeconds)override;floatRunningTime;};
FloatingActor.cpp
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.#include"QuickStart.h"#include"FloatingActor.h"// 設置默認值AFloatingActor::AFloatingActor(){// 將此actor設置為在每一幀都調用Tick()。 如果您不需要這項功能,您可以關閉它以改善性能。PrimaryActorTick.bCanEverTick =true;}// 當游戲開始或生成時調用voidAFloatingActor::BeginPlay(){Super::BeginPlay();}// 在每一幀調用voidAFloatingActor::Tick(floatDeltaTime){Super::Tick(DeltaTime);FVectorNewLocation=GetActorLocation();floatDeltaHeight=(FMath::Sin(RunningTime+DeltaTime)-FMath::Sin(RunningTime));NewLocation.Z +=DeltaHeight*20.0f;//把高度以20的系數進行縮放RunningTime+=DeltaTime;SetActorLocation(NewLocation);}
-
在 虛幻編輯器 中,找到 Content Browser(內容瀏覽器) ,並展開名稱為"C++類"的文件夾、 在該文件夾中,有一個包含了 Actor類的 FloatingActor 的"QuickStart"文件夾。
-
我們可以直接把 FloatingActor 類拖曳到 Level Editor(關卡編輯器) 窗口來創建世界中 FloatingActor 的實例。 我們會在 Level Editor(關卡編輯器) 和 World Outliner(世界大綱視圖) 中選擇它,它在其中的名稱為 "FloatingActor1"。 它的 Components(組件) 和其它屬性可以在 Details(詳細信息) 面板中看到。
-
FloatingActor 應該在游戲中可見。 在選擇了它后,我們可以在 Details Panel(詳細信息面板) 中點擊 Add Component(添加組件) ,然后選擇 Cone(椎體) 從而賦予它簡單的可視化表現。
-
現在自定義的 Actor 已經完成了,讓我們把它移動到明顯的位置。 我們可以用鼠標左鍵在世界中選擇並拖曳內容,或者我們也可以手動來移動它。 如需手動移動,我們可以在 Level Editor(關卡編輯器) 或 World Outliner(世界大綱視圖) 中選擇它,然后使用Details Panel(詳細信息面板) 來選擇"FloatingActor1 (實例)"。 我們現在可以直接編輯FloatingActor1的 Transform(變換) 的Location(位置) 域了。 讓我們把X設置為-200,把Z設置為200。這樣我們就可以在場景中的桌子上放置"FloatingActor1"了。
-
按下 Play(播放) 按鈕,然后觀看椎體的上下浮動!
Finished Code
FloatingActor.h
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.#pragma once #include"GameFramework/Actor.h"#include"FloatingActor.generated.h" UCLASS()class QUICKSTART_API AFloatingActor:publicAActor{ GENERATED_BODY()public:// 設置此actor屬性的默認值AFloatingActor();// 當游戲開始或生成時調用virtualvoidBeginPlay()override;// 在每一幀調用virtualvoidTick(floatDeltaSeconds)override;floatRunningTime;};
FloatingActor.cpp
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.#include"QuickStart.h"#include"FloatingActor.h"// 設置默認值AFloatingActor::AFloatingActor(){// 將此actor設置為在每一幀都調用Tick()。 如果您不需要這項功能,您可以關閉它以改善性能。PrimaryActorTick.bCanEverTick =true;}// 當游戲開始或生成時調用voidAFloatingActor::BeginPlay(){Super::BeginPlay();}// 在每一幀調用voidAFloatingActor::Tick(floatDeltaTime){Super::Tick(DeltaTime);FVectorNewLocation=GetActorLocation();floatDeltaHeight=(FMath::Sin(RunningTime+DeltaTime)-FMath::Sin(RunningTime));NewLocation.Z +=DeltaHeight*20.0f;//把高度以20的系數進行縮放RunningTime+=DeltaTime;SetActorLocation(NewLocation);}
通過使用您已經掌握的內容,您可以進行如下操作:
-
添加粒子系統組件 到您的 FloatingActor 中。 您的項目中已經包括了預編譯的 粒子系統 。
-
您可以使用 虛幻引擎的 UProperty宏來顯示一個變量,以用於您的 FloatingActor的 移動力的大小,而不是使用硬編碼值。 您可以查看Variables, Timers, and Events教程來獲得關於此主題的幫助信息。
-
添加X和/或Y軸的周期性運動,並將 DeltaTime 值乘以0.6和1.4之間的值,這樣您的 FloatingActor 看起來是自由懸浮的。 對於能力加成道具來說,這個看起來很棒!
對於本教程中提到的詳細內容,請參考以下文件:
-
如需了解更多關於 Actors 的信息,請參閱Actor手冊頁面。
-
如需閱讀更多教程,請參閱C++ Programming Tutorials頁面。
再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!https://www.cnblogs.com/captainbed