【UE4學習】02——C++編程快速入門

官方文檔教程:點擊打開鏈接

在本教程的過程中,我們會創建新的 虛幻引擎 項目,向其添加新的C++類,然後編譯項目並添加新類的實例到關卡中。 在完成後,我們會看到以C++來編程的 Actor 在屏幕上的移動。

width="640" height="360" src="https://www.youtube.com/embed/dS1f71pS-5I?rel=0" frameborder="0" allowfullscreen="" style="color: rgb(22, 22, 23); font-family: Tahoma, Helvetica, Arial, 'Microsoft Yahei', ΢���ź�, STXihei, ����ϸ��, sans-serif; font-size: 15px; line-height: 26.25px;">

==========================================

1. 必備的項目設置

  • SHARE:
  1. 從啓動程序中打開 虛幻引擎 。 項目瀏覽器將會出現。

  2. 點擊 New Project(新建項目) 選項卡,然後選擇 C++ 選項卡。 在該處選擇 Basic Code(基礎代碼) ,這樣我們可以獲得全新的起始點,確認設置了 "With Starter Content(和入門內容共同啓動)"。 我們需要輸入項目名稱,就使用"QuickStart"吧。 現在可以點擊Create Project(創建項目) 並開始了。

    CreateProject.png

Unreal Editor(虛幻編輯器) 現在將會打開新項目。 Visual Studio 也會打開,並載入項目剛創建的解決方案文件。

2. 創建C++類

  • SHARE:
  1. 在 Unreal Editor(虛幻編輯器) 中,我們可以使用 Add Code to Project(添加代碼到項目) 命令來創建新的C++類,它位於File(文件) 下拉菜單中。

    AddCPPCode.png

  2. 此時將會打開 Choose Parent Class(選擇父類) 菜單。 由於 Actor 是能夠存在於 Unreal Engine(虛幻引擎) 層面的最爲基礎的類,我們將會把 Actor 類作爲基類。

    ChooseParentClass.png

  3. 此時將會打開 Name Your New Actor(命名您的新Actor) 菜單。 對這個示例來說,讓我們輸入名稱"FloatingActor",然後點擊Create Class(創建類) 。

    NameActorClass.png


現在我們已經創建了一個C++類,我們可以切換到 Visual Studio 來對它編程。 FloatingActor.cpp將會自動打開, Unreal Engine(虛幻引擎) 會自動編譯並使用我們的新類來重新載入代碼。

3. 寫入並編譯C++代碼

  • SHARE:
  1. 在 Visual Studio 中,我們會使用 Solution Explorer(解決方案瀏覽器) 面板來搜尋新建的C++文件。 在我們的示例中,它們被命名爲FloatingActor.cppFloatingActor.h,並且將被放置於"QuickStart"項目中。

    SolutionExplorer_Files.png

    我們要開始寫代碼了。 本教程中所有的代碼可用於完成本頁面的所有指示,您可以在頁面的底部位置找到它們。

  2. FloatingActor.h中,我們會在文件末尾處的終止大括號和分號之前添加以下代碼:

    float RunningTime;
  3. 切換到FloatingActor.cpp,我們會在 AFloatingActor::Tick 底部的終止大括號前添加以下代碼:

    FVector NewLocation = GetActorLocation();
    float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime));
    NewLocation.Z += DeltaHeight * 20.0f;      //把高度以20的係數進行縮放
    RunningTime += DeltaTime;
    SetActorLocation(NewLocation);

    我們剛寫的代碼會導致 FloatingActors 平滑地上下跳動,使用我們創建的 RunningTime 變量來隨時間追溯移動的軌跡。

  4. 現在編碼完成了,我們可以通過在 Solution Browser(解決方案瀏覽器) 中右鍵點擊項目並選擇 Build(編譯) 命令,或通過點擊Unreal Editor(虛幻編輯器) 的 Compile(編譯) 按鈕來進行編譯。 編譯成功後, 虛幻引擎 會自動載入我們的變更內容。

    CompileFromVS.png

    (在 Visual Studio 中)

    CompileFromEditor.png

    (在 虛幻編輯器 中)


我們現在可以基於代碼來在 虛幻引擎 中創建物體了! 所有本頁面中使用的代碼都在下方,以供您參考。

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 : public AActor
{
    GENERATED_BODY()

public: 
    // 設置此actor屬性的默認值
    AFloatingActor();

    // 當遊戲開始或生成時調用
    virtual void BeginPlay() override;

    // 在每一幀調用
    virtual void Tick( float DeltaSeconds ) override;

    float RunningTime;
};

FloatingActor.cpp

// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.

#include "QuickStart.h"
#include "FloatingActor.h"

// 設置默認值
AFloatingActor::AFloatingActor()
{
    // 將此actor設置爲在每一幀都調用Tick()。  如果您不需要這項功能,您可以關閉它以改善性能。
    PrimaryActorTick.bCanEverTick = true;

}

// 當遊戲開始或生成時調用
void AFloatingActor::BeginPlay()
{
    Super::BeginPlay();

}

// 在每一幀調用
void AFloatingActor::Tick( float DeltaTime )
{
    Super::Tick( DeltaTime );

    FVector NewLocation = GetActorLocation();
    float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime));
    NewLocation.Z += DeltaHeight * 20.0f;      //把高度以20的係數進行縮放
    RunningTime += DeltaTime;
    SetActorLocation(NewLocation);
}

4. 測試您的代碼

  • SHARE:
  1. 在 虛幻編輯器 中,找到 Content Browser(內容瀏覽器) ,並展開名稱爲"C++類"的文件夾、 在該文件夾中,有一個包含了 Actor類的 FloatingActor 的"QuickStart"文件夾。

    ClassInContentBrowser.png

  2. 我們可以直接把 FloatingActor 類拖曳到 Level Editor(關卡編輯器) 窗口來創建世界中 FloatingActor 的實例。 我們會在 Level Editor(關卡編輯器) 和 World Outliner(世界大綱視圖) 中選擇它,它在其中的名稱爲 "FloatingActor1"。 它的Components(組件) 和其它屬性可以在 Details(詳細信息) 面板中看到。

    WorldOutliner.png

  3. FloatingActor 應該在遊戲中可見。 在選擇了它後,我們可以在 Details Panel(詳細信息面板) 中點擊 Add Component(添加組件) ,然後選擇 Cone(椎體) 從而賦予它簡單的可視化表現。

    AddStaticMesh.png

  4. 現在自定義的 Actor 已經完成了,讓我們把它移動到明顯的位置。 我們可以用鼠標左鍵在世界中選擇並拖曳內容,或者我們也可以手動來移動它。 如需手動移動,我們可以在 Level Editor(關卡編輯器) 或 World Outliner(世界大綱視圖) 中選擇它,然後使用Details Panel(詳細信息面板) 來選擇"FloatingActor1 (實例)"。 我們現在可以直接編輯FloatingActor1的 Transform(變換) 的Location(位置) 域了。 讓我們把X設置爲-200,把Z設置爲200。這樣我們就可以在場景中的桌子上放置"FloatingActor1"了。

    SetActorLocation.png

  5. 按下 Play(播放) 按鈕,然後觀看椎體的上下浮動!

    MovingCone.png


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 : public AActor
{
    GENERATED_BODY()

public: 
    // 設置此actor屬性的默認值
    AFloatingActor();

    // 當遊戲開始或生成時調用
    virtual void BeginPlay() override;

    // 在每一幀調用
    virtual void Tick( float DeltaSeconds ) override;

    float RunningTime;
};

FloatingActor.cpp

// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.

#include "QuickStart.h"
#include "FloatingActor.h"

// 設置默認值
AFloatingActor::AFloatingActor()
{
    // 將此actor設置爲在每一幀都調用Tick()。  如果您不需要這項功能,您可以關閉它以改善性能。
    PrimaryActorTick.bCanEverTick = true;

}

// 當遊戲開始或生成時調用
void AFloatingActor::BeginPlay()
{
    Super::BeginPlay();

}

// 在每一幀調用
void AFloatingActor::Tick( float DeltaTime )
{
    Super::Tick( DeltaTime );

    FVector NewLocation = GetActorLocation();
    float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime));
    NewLocation.Z += DeltaHeight * 20.0f;      //把高度以20的係數進行縮放
    RunningTime += DeltaTime;
    SetActorLocation(NewLocation);

5. 發揮想象!

  • SHARE:

通過使用您已經掌握的內容,您可以進行如下操作:

  • 添加粒子系統組件 到您的 FloatingActor 中。 您的項目中已經包括了預編譯的 粒子系統 。

  • 您可以使用 虛幻引擎的 UProperty宏來顯示一個變量,以用於您的 FloatingActor的 移動力的大小,而不是使用硬編碼值。 您可以查看Variables, Timers, and Events教程來獲得關於此主題的幫助信息。

  • 添加X和/或Y軸的週期性運動,並將 DeltaTime 值乘以0.6和1.4之間的值,這樣您的 FloatingActor 看起來是自由懸浮的。 對於能力加成道具來說,這個看起來很棒!

對於本教程中提到的詳細內容,請參考以下文件:


-----------------------------------------------------------------------------------------------

PS:

編程方面跟Unity C#有點像,函數有對應的生命週期,不過C++的.cpp和.h的編輯方式要多注意下。


發佈了29 篇原創文章 · 獲贊 87 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章