日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ue4 classuobject没有成员beginplay_关于UE4使用的一些想法(一)

發布時間:2025/3/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ue4 classuobject没有成员beginplay_关于UE4使用的一些想法(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天,在單步調試程序時,對照引擎,突然有了些想法。以前沒注意到,是因為以前都是用引擎的dll,并沒有這么調試過。

1,每個引擎都是有自己的初始化和幀循環,使用引擎的過程,就是相當于把引擎當做工廠,自己的數據相當于原材料,進行加工的過程。不同的引擎有不同的加工流水線。

2,加工過程,要遵循引擎的流水線流程,而不是自己創造一個,如果只用引擎的類初始化,而沒有用引擎的幀循環,很可能沒有掌握住精髓。前幾年,有個項目,用OSG,架構師自己寫了個幀循環過程,結果,由于是單線程,最后卡的一筆,項目失敗。

3,如何使用引擎的幀循環過程?一個方法是用該類,或者繼承抽象類,用父類調用子類的方式,把自己的東西嵌套進去,貍貓換太子,即父類轉小圈,子類替代父類轉大圈。而不是只看這個引擎一個循環多么熱鬧,卻無從下手。

使用UE4時,

1,在PreInit()

(1)首先動態加載自定義工程的dll,(這里隱藏了,其實應該到項目的dll)

(2),調用動態鏈接庫中派生類的構造函數,這里解釋下,其實就是UCLASS()派生類,既然要用父類調用子類的方式,起碼要知道有哪些子類

比如

UClass()

class myActor : public AACtor

{

GENERATED_BODY()

public:

myActor ();

}

這里就是要調用

myActor::myActor()了。

單步調試:(這里應該跟蹤到myActor::myActor(),隱藏了)

這里的ClassDefaultObject就是派生類,如myActor,ParentDefaultObject即為父類AActor,只是前面加了個前綴Default_。

接下來,就是工程動態鏈接庫中的一系列UCLASS()派生類。

這時候,可以趁機把一系列的游戲中用到的類都派生出來,比如,AActor,APawn,AGameModeBase,UGameViewportClient,

在構造函數中可以加點私貨,自己的自定義類。在此時調用構造函數中干點自己的事。

2,在FEngineLoop::init()階段,進行初始化了

這里上面也隱藏了,注意,這個this是什么,這個this是FEngineLoop,也就是說,在這里,可以不失時機地派生一個類

UCLASS()

class myGameEngine : public UGameEngine

{

GENERATED_BODY()

public:

virtual void Init(class IEngineLoop* InEngineLoop) override;

}

去實現自定義的myGameEngine::Init(class IEngineLoop* InEngineLoop)

可以只寫UGameEngine::Init(),也可以加一些自定義的東西,UGameEngine類其實比較全了。成員變量有

/** Maximium delta time the engine uses to populate FApp::DeltaTime. If 0, unbound. */

UPROPERTY(config)

float MaxDeltaTime;

/** Maximium time (in seconds) between the flushes of the logs on the server (best effort). If 0, this will happen every tick. */

UPROPERTY(config)

float ServerFlushLogInterval;

UPROPERTY(transient)

UGameInstance* GameInstance;

/** The game viewport window */

TWeakPtr<class SWindow> GameViewportWindow;

/** The primary scene viewport */

TSharedPtr<class FSceneViewport> SceneViewport;

/** The game viewport widget */

TSharedPtr<class SViewport> GameViewportWidget;

/** Handle to a movie capture implementation to create on startup */

FMovieSceneCaptureHandle StartupMovieCaptureHandle;

/** Last time the logs have been flushed. */

double LastTimeLogsFlushed;

以及相關的方法,由于太多了,所以不列出了。

主要進行一些初始化

先調基類(UGameEngine派生與UEngine)

游戲設置

游戲實例

編輯器模式下視頻捕捉

如果是客戶端,則開個客戶端視口

看到這里,想到什么?是的,派生,再派生出一個自定義的客戶端視口類

UCLASS()

class myGameViewportClient : public UGameViewportClient

{

GENERATED_BODY()

。。。

}

這樣,客戶端視口也為我所用了,而不是干瞪眼看著UE4自己玩了。

將視口放在視口界面里,創建視口所在的窗口。

3,現在初始化完畢了,該啟動引擎了。

依照慣例,也要把gameInstance派生出來,為我所用

UCLASS()

class myGameInstance : public UGameInstance

{

GENERATED_BODY()

.......

}

在這里,照樣 UGameInstance::StartGameInstance()不是純虛函數,所以還要除了自定義的外,還要用一用。這里的初始化主要就是業務內容的初始化了。也就是開始游戲了。

(1)加載游戲地圖,得到gameMode

可以回憶下,fps模板中,生成默認pawn,初始化彈簧手臂和攝像機一類的。

很明顯,這里要派生個pawn類,到這里,就和ue4編輯器的c++模板連貫起來了。

(2)

總結

以上是生活随笔為你收集整理的ue4 classuobject没有成员beginplay_关于UE4使用的一些想法(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。