1. 程式人生 > ><轉載> UE4的Actor類C++簡單嘗試

<轉載> UE4的Actor類C++簡單嘗試

package imageview 獲取 png include += original iostream -h

原文鏈接: 簡書 小小酥XX https://www.jianshu.com/p/2bcc80f0e789

一開始我用了一段時間UE4,發現如果用藍圖系統真的不太適合我的風格。因為之前一直都是用Unity3D做程序開發的。但是後來接觸了UE4的C++之後感覺還是挺良好的。貌似國內沒有相關的書籍和教材,那就只能去看官網的參考文檔了

https://docs.unrealengine.com/latest/INT/Programming/index.html

UE4和Unity3D給我的總體感覺:

1.UE4消耗性能比Unity大N多,基本上開了UE4遊戲都開不了
2.UE的藍圖適合給美工看,程序員還是老老實實用C++吧
3.Unity每次寫完C#代碼保存就能運行,而UE4只能每次寫完代碼手動再編譯和重啟一次才能使用,這個很依賴性能特別強的電腦,尤其是CPU、固態、固態
4.Unity基於組件編程,每個在視圖窗口裏面的Gameobject繼承自MomoBehavior都有OnGUI、Update、Start之類的 系統回調給你使用。而UE4只能自己手動繼承虛函數Tick和BeginPlak,對它進行復寫。給我感覺就是2部好車,一部是自動擋、一部是手動擋。

新建一個虛幻4的C++基礎項目

技術分享圖片 Paste_Image.png

新建完成後

技術分享圖片 Paste_Image.png

新建一個Actor類

技術分享圖片 Paste_Image.png

為其添加上代碼

#pragma once
#include "GameFramework/Actor.h"
#include "MyActor.generated.h"
UCLASS()
class EMPTY_API AMyActor : public AActor
{
    GENERATED_BODY()

public:
    //運行時間
    float
RunningTime; //構造器 AMyActor(); //開始時執行的回調 相當於Unity裏面的 void Start() virtual void BeginPlay() override; //每一幀執行的回調 相當於Unity裏面的 void Update() virtual void Tick( float DeltaSeconds ) override; }; #include "empty.h" #include "MyActor.h" #include "iostream" //構造器 AMyActor::AMyActor() {
//設置每一幀執行一次Tick() ,如果不需要就設為false PrimaryActorTick.bCanEverTick = true; } //開始時執行的回調 void AMyActor::BeginPlay() { Super::BeginPlay(); std::cout << "開始執行"; } //每一幀執行的回調 void AMyActor::Tick( float DeltaTime ) { std::cout << "每一幀執行"; Super::Tick( DeltaTime ); //獲取Actor的位置 保存到NewLocation變量 FVector NewLocation = GetActorLocation(); //獲取時間差值 float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime)); //改變的高度,每次遞增20.0f NewLocation.Z += DeltaHeight * 20.0f; //改變運行時間的值 RunningTime += DeltaTime; //設置當前Actor的位置 SetActorLocation(NewLocation); }
 

最後把代碼MyActor添加到一個圓錐體上,按Ctrl+F5 編譯一下 就能看到它在上下的晃動

技術分享圖片

<轉載> UE4的Actor類C++簡單嘗試