一.命名規則
F 純C++類
U 繼承自UObject,但不繼承自Actor
A 繼承自Actor
S Slate控制元件類
H HitResult相關類
二.生成
在標準C++中,一個類產生一個物件,被稱為“實體化”,實體化物件的方法通過new關鍵字,
而在虛幻中,對于某些型別,我們不得不通過呼叫某些函式來產生物件,
①如果你的類是純C++的類(F開頭),你可以通過new來產生物件,
②如果你的類繼承自UObject但不繼承自Actor,你需要通過NewOBject函式來產生物件,
③如果你的類繼承自AActor,你需要通過SpawnActor函式來產生物件,
三.類物件的獲取
獲取一個物件的唯一的方法,就是通過某種方式傳遞到這個物件的指標或參考,
①獲取場景中某種Actor的所有實體?
for(TActorIterator<AActor> Iterator(GetAorld());Iterator;++Iterator)
四.銷毀
①如果是純C++類在函式體重創建,而不是通過new來分配的,則這個類的物件在函式呼叫結束后會隨著函式堆疊空間的釋放,一起釋放掉,不需要手動干涉,
②如果是純C++類使用new來分配記憶體,而且你直接傳遞類的指標,那么需要意識到:除非你手動洗掉,否則這一塊記憶體將永遠不會被釋放,如果忘記了,就會產生記憶體泄漏,
③如果你使用純C++類來使用new分配記憶體,同時使用智能指標TSharedPtr/TSharedRef
來進行管理,那么你的類物件將不需要也不應該被你手動釋放,智能指標會使用參考計數來完成自動的記憶體釋放,你可以使用MakeShareable函式來轉換為普通指標為智能指標:
TSharedPtr<YourClass> YourClassPtr = MakeShareable(new YourClass());
④繼承自UObject采用垃圾回識訓制,當一個類的成員變數包含指向UObject的物件,同時又帶有UPROPERTY宏定義,那么這個成員變數將會觸發參考計數機制,
垃圾回收期會定期從根節點Root開始檢查,當一個UObject沒有被別的任何UObject參考,就會被垃圾回收,你可以通過AddToRoot函式來讓一個UObject一直不被回收,
⑤Actor類
Actor類物件可以通過Destroy函式來請求銷毀,這樣的銷毀意味著當前的Actor從所屬的世界中被摧毀,但是物件對應的記憶體的回收依然由系統決定,
五.從C++到藍圖
1.UPROPERTY
當你需要將一個UObject的子類的成員變數注冊到藍圖中
UPROPERTY(BlueprintReadWrite,VisibleAnyWhere,Category = "Object")
2.UFUNCTION
當你需要將一個函式供藍圖呼叫
UFUNCTION(BlueprintCallable,Category="TestLogory")
BlueprintImplementEvent 必須由藍圖的子類實作,不應該在C++中給出實作,否則會導致鏈接錯誤
BlueprintNativeEvent 必須在C++函式中實作默認,在藍圖中可實作重寫,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/36599.html
標籤:其他
下一篇:cocos2dx 入門 環境配置
