我在虛幻引擎4中編寫遊戲。引擎爲您提供了幾個課程。在這個問題中,我將更多地關注類的關係而不是它們的目的。例如A - > B意味着A繼承自B):
ACharacter - > APawn - > AActor - > ... - >這個引擎的類是這樣的(例如A→B意味着A繼承自B)
UObject
「...」只是未發佈的類。
UObject類是引擎的主類,幾乎引擎中的每個類都在我的遊戲中最終繼承了UObject形式,此外它還提供了許多我需要的功能。
繼承是而不是虛擬繼承。這對未來很重要。我無法編輯任何引擎的類。更好的課堂設計
在我的遊戲中有3個主要類: 建築,生活和實體。
大廈繼承都 AActor和實體
生活繼承都和壓低的實體
我已經創建了涉及建築或生活沒有複製我的代碼的實體類。例如,生活類需要提供攻擊另一個生活或建築物的功能。所以我可以創建兩個具有活動目標參數的「AttackLiving」函數和一個具有Building對象參數的函數「AttackBuilding」,這兩個函數都具有完全相同的功能。相反,我創建了實體類,這樣我只需要一個函數 - 「AttackEntity」。當然這只是一個例子,我在整個代碼中都使用了Entity類,所以我可以在一個鏡頭中引用Living和Building。
問題始於實體類。我在一年前犯了一個錯誤,當時我真的創造了它,我沒有想到這一點。問題是實體不能從UObject繼承。同樣,UObject類是引擎的主類,它提供了我需要的許多功能。因爲實體不從UObject繼承,所以我不能訪問我需要的任何函數。
我不能讓UObject或AActor的實體繼承,因爲虛擬繼承在這裏不起作用。 (再次引擎類繼承不是虛擬繼承)
我曾想到可能的解決方案的數量。其中之一是,我總是可以將實體建立到建築或生活取決於實體的類型,而且我可以使用UObject的功能。但這是一個非常難看的解決方案,它與實體的精髓形成鮮明對比 - 與生活和建築的個性無關。
另外我曾經想過在UObject類的實體中有一個指針,但這是一個非常醜陋的解決方案,它並不能解決所有的問題。對於Entity的另一個問題(它也不能從UObject繼承):有一個名爲「TWeakObjectPtr」的模板類,它在模板中獲取一個類,爲它創建一個指針並檢查指針是否在其他地方沒有釋放由發動機。
TWeakObjectPtr<Entity> entityPointer;
的問題是,TWeakObjectPtr檢查,在從UObject模板inherites給出,類,當然它不是,所以我不能用TWeakObjectPtr。
總而言之,主要問題是實體不是來自UObject的繼承。但我確實需要它,所以我可以將生活和建築聯繫在一起。
如果您可以使用保留實體的解決方案,我很樂意。提前致謝!
UObject是UE4的基類。一切都必須從UObject繼承。我建議重做你的實體類來實現這個目的,否則我不相信它會工作。 –
此外,您可以在遊戲開發論壇中獲得更多幫助:https://gamedev.stackexchange.com/ –
@ethancodes我知道這一點,但我無法使其繼承UObject,因爲虛擬繼承不起作用這裏。你對這個問題有任何實際的解決方案嗎? – user2203448