在介紹UE4渲染體系前,我們有必要來先看一下UE4是用什么樣的方式來構建游戲場景資料的,
1 Object
在UE4中當我們說Object,通常是指代引擎代碼中的UObject類,它是引擎里管理絕大部分類和物件的基石,這是因為它提供了非常多的開發者需要的功能特性,例如元資料、反射、垃圾回收、序列化、編輯器支持等一系列功能,
與Unity中的物體容器GameObject相比(名字上類似),個人理解UObject存在更像是一種UE4提供的開發核心工具箱,各種需要高復用性的核心功能都集成到里面,不僅僅說場景里的各個物體需要用到UObject提供的功能,不可見的底層資料管理同樣也需要使用到這些,
2 Actor
Actor通常指代引擎代碼中的AActor類,所有可以放置到游戲場景中的"物體"都是一個Actor,例如角色、怪物、光(ALight)、場景(AStaticMeshActor)、攝像機(ACameraActor)等等,它提供的功能和Unity的GameObject就比較相似了,作為一個容器包含一個"物體"的各種內容,自然地AActor繼承自UObject類,在UObject的基礎上,還提供了網路同步、創建銷毀、幀更新等功能,
對很多剛接觸的開發者來說,可能Actor的名字看起來有點突兀,UE4并沒有特別說明該名稱的由來,個人理解,Actor單詞本身的意思是演員,如果可以把游戲看作一場演出的話,其中就是各位出演角色各司其職,角色和怪物完成各種互動、光照(就像打光師)完成場景光照、場景物體可以各種移動變化、攝像機完成拍攝等等,
3 Component
Component通常指代引擎代碼中的UActorComponent類,繼承UObject,是所有組件型別的基類,通常掛載在Actor實體下,如同之前所介紹的,Actor本身是一個容器,而Actor具體的特性則由其具有的Component決定,如在世界場景中的位置旋轉縮放(USceneComponent)、模樣(UMeshComponent)等等,
Component對于Actor來說并不是必選的,可以存在沒有組件的空Actor、不需要空間位置的Actor、不需要模樣的Actor等等,這樣在我們DIY自己需要的Actor時,就可以盡可能少地引入不需要的內容了,
4 Level
Level通常指代引擎代碼中的ULevel,也被叫做關卡,是UE4中用于組織游戲場景的基本單位,由一系列可見和不可見的Actor組成,同時還包含Level自身的一些屬性,比如關卡屬性、關卡藍圖等等,和Unity中的Scene概念相通,
5 World
World,引擎代碼中的UWorld,如果說Level代表場景,那World代表承載這個場景的世界,Level必須放在World中才能顯示出其中的內容,對于一些以關卡切換來轉換游戲場景的游戲來說,他們一個Level就是一個World,這樣的概念可能有點多余,但是在很多開放世界的專案中,一個World同時可能不止一個Level,很多3A游戲的無縫多場景切換也是得益于流式關卡(Streaming Level)的使用,
6 Script
除了以上的基本概念,還有腳本(Script)存在于世界的各個Actor中,腳本可以用于給Actor添加不同的行為,腳本可以是C++定義撰寫的,也可是藍圖定義的,從功能上看,腳本和Component十分相像,但在UE4的組織形式上看,腳本并非是一種Component,而更像是一種對Actor的補充,從程式員角度來講,就像是對Actor一些介面的覆寫(Override),例如自定義BeginPlay、Tick、EndPlay等(對應Unity中的Start、Update、End)時Actor應該有的操作,
順帶一提
你可能已經發現在提到引擎代碼中的類名時,相比名稱會多出一個前綴(Prefix),這是UE4中一種編碼規范,用來指代該類的類別:
T:模板類,例如TArray;U:繼承UObject的類;A:繼承AActor的類;S:繼承SWidget的類;I:抽象界面類;E:列舉;F:其他多數類(不在UObject繼承體系內);
參考文獻
- [1] 0向往0,剖析虛幻渲染體系(01)- 綜述和基礎
- [2] UE4官方檔案,Actor生命周期
- [3] UE4官方檔案,代碼規范
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/455611.html
標籤:其他
