UObject
UObject表示對象,準確來說,虛幻引擎中的對象基礎類為UObject
UObject提供了以下功能:
- 垃圾收集(Garbage collection)
- 引用自動更新(Reference updating)
- 反射(Reflection)
- 序列化(Serialization)
- 自動檢測默認變量的更改(Automatic updating of default property changes)
- 自動變量初始化(Automatic property initialization)
- 和虛幻引擎編輯器的自動交互(Automatic editor integration)
- 運行時類型識別(Type information available at runtime)
- 網絡復制(Network replication)
使用UObject是因為要使用上述某些功能,而不是因為他是UE對象基類
Actor
· 所有可以放入關卡的對象都是Actor,比如攝像機、靜態網格體、玩家起始位置。Actor支持三維變換,例如平移、旋轉、縮放,你可以通過游戲邏輯代碼(C++或藍圖)創建(生成)或銷毀Actor
· 在C++中,AActor是所有Actor的基類
· Actor繼承自UObject
· Actor能夠被掛載組件
· Actor擁有Tick的能力
· 組件是Component,并不是Actor
· Actor并不自帶Transform,Actor的Transform來自于其RootComponent
· 絕大部分在場景中的對象,無論是有形的還是無形的,都是Actor
Component
· 組合大于繼承
· 為了弱化Actor的繼承鏈,提出了Component的概念
· Component繼承自UObject,比Actor輕量
· 主要存在兩種Component,SceneComponent和ActorComponent,SceneComponent在場景中存在Transform,也能有坐標系父子關系
· UE更傾向于編寫功能單一的Component,而不是一個整合了其他Component的大管家Component
· Component應該作為Actor較獨立可復用性功能的載體,Actor本身也擁有數據存儲能和邏輯實現能力,主要用于實現游戲業務邏輯
· Actor在世界中的位置屬性、父子關系,全權由Component接管
Pawn
· 繼承自Actor
· Pawn相比于Actor,可以被Controller控制
· 相比于Actor的邏輯,Pawn通過Controller解耦了游戲的業務邏輯,將Pawn自身實現的邏輯和上層控制邏輯分開
· 解耦:耦合是指兩個或兩個以上的體系或兩種運動形式間通過相互作用而彼此影響以至聯合起來的現象,解耦就是用某種方法將兩種體系分離開來處理
問題
Controller
· Controller繼承自Actor(為了使用Actor的掛載組件、Tick等功能)
· AController
· Controller里只是保存了一個Pawn指針(一對一)
· Controller在邏輯上應該實現玩家邏輯
· Controller的Transform作用
虛幻引擎核心設計:MVC