最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

基礎(chǔ)知識(shí)-為Unity開(kāi)發(fā)準(zhǔn)備的指南

2023-02-20 11:34 作者:夢(mèng)起夢(mèng)落夢(mèng)若風(fēng)  | 我要投稿

本頁(yè)面為熟悉Unity的用戶概述了?虛幻引擎(UE)。如果你具備一些Unity知識(shí),而且想學(xué)習(xí)如何運(yùn)用自己所學(xué)的知識(shí)在虛幻引擎中工作,下面各小節(jié)將幫助你入門(mén)。


虛幻編輯器

虛幻編輯器(Unreal Editor)?是你處理虛幻引擎項(xiàng)目的地方。下面的截圖并排顯示了Unity和虛幻編輯器。各個(gè)區(qū)域采用相同的顏色來(lái)表示相同的功能。每個(gè)區(qū)域上還添加了名稱(chēng),以便你了解它們?cè)谔摶靡嬲Z(yǔ)境中的稱(chēng)呼。

虛幻編輯器支持自定義布局。你可以拖放選項(xiàng)卡、將其??康街鞔翱谥?、更改顏色方案,等等。

Unity和虛幻引擎5主界面元素的直觀對(duì)比


編輯資產(chǎn)

在Unity中,你使用?Inspector?選項(xiàng)卡來(lái)編輯項(xiàng)目中的所選資產(chǎn)。在虛幻編輯器中,細(xì)節(jié)(Details)?面板公開(kāi)所選資產(chǎn)的屬性。比較復(fù)雜的資產(chǎn)編輯工作則在專(zhuān)門(mén)的編輯器窗口中處理,你可以將這些窗口停靠到主UE窗口中,或拖動(dòng)到桌面上的其他地方(例如,拖到第二個(gè)顯示器)。


虛幻編輯器中的選項(xiàng)卡式編輯器。關(guān)卡編輯器(Level Editor)?在背景中,而?材質(zhì)編輯器(Material Editor)?目前處于活動(dòng)狀態(tài)。


術(shù)語(yǔ)簡(jiǎn)表

下表左側(cè)是Unity中常見(jiàn)術(shù)語(yǔ),右側(cè)則是對(duì)應(yīng)的(或近似的)虛幻引擎術(shù)語(yǔ)。


Gameplay類(lèi)型

Component

組件


GameObject

Actor


Prefab

藍(lán)圖類(lèi)


編輯器界面

Hierarchy Panel

世界大綱視圖


Inspector

細(xì)節(jié)面板


Project Browser

內(nèi)容瀏覽器


Scene View

關(guān)卡視口


網(wǎng)格體

Mesh

靜態(tài)網(wǎng)格體


Skinned Mesh

骨骼網(wǎng)格體


材質(zhì)

Shader

材質(zhì)、材質(zhì)編輯器


Material

材質(zhì)實(shí)例


特效

Particle Effect

特效、粒子、Niagara


游戲界面

UI

UMG(虛幻示意圖形)


動(dòng)畫(huà)

Animation

骨骼網(wǎng)格體動(dòng)畫(huà)系統(tǒng)


Mecanim

動(dòng)畫(huà)藍(lán)圖


Sequences

Sequencer


2D

Sprite Editor

Paper2D


編程

C#

C++


Script、Bolt

藍(lán)圖


物理

Raycast

Line Trace、Shape Trace]


Rigidbody

碰撞、物理


運(yùn)行時(shí)平臺(tái)

iOS Player、Web Player

支持的平臺(tái)


項(xiàng)目和文件

怎么理解虛幻引擎項(xiàng)目的常用文件和目錄?

和Unity項(xiàng)目一樣,虛幻項(xiàng)目也保存在專(zhuān)門(mén)的目錄結(jié)構(gòu)中,并且有自己的項(xiàng)目文件,擴(kuò)展名為?.uprojectfile?。你可以?雙擊?.uproject?文件,將游戲加載到虛幻編輯器中,或?右鍵點(diǎn)擊?查看更多選項(xiàng)。

項(xiàng)目目錄包含不同子目錄,保存了游戲的資產(chǎn)內(nèi)容和源代碼,以及各種配置文件和二進(jìn)制文件。其中最重要的就是?Content?文件夾和?Config?文件夾,前者保存項(xiàng)目的所有資產(chǎn),后者保存項(xiàng)目的配置(.ini)文件。


我的資產(chǎn)應(yīng)該放在哪里?

在虛幻引擎中,每個(gè)項(xiàng)目都有一個(gè)?Content?文件夾。這類(lèi)似于Unity項(xiàng)目的?Assets?文件夾,是你保存游戲資產(chǎn)的地方。

如果你的虛幻引擎項(xiàng)目包含C++類(lèi),它們將位于項(xiàng)目在磁盤(pán)上的?Source?文件夾。

要將資產(chǎn)導(dǎo)入游戲中,請(qǐng)通過(guò)內(nèi)容瀏覽器將文件放入項(xiàng)目的?Content?目錄。


支持哪些文件格式?

虛幻引擎5支持一些最常見(jiàn)的文件類(lèi)型:


3D

.fbx、.obj


紋理

.png、.jpeg、.bmp、.tga、.dds、.exr、.psd、.hdr


聲音

.wav


字體

.ttf、.otf


視頻

.mov、.mp4、.wmv


此外,你可以使用專(zhuān)用插件導(dǎo)入其他類(lèi)型的內(nèi)容,例如:


Datasmith

3ds Max、SketchUp、Revit等各種CAD應(yīng)用程序中的3D場(chǎng)景和資產(chǎn)


LiDAR點(diǎn)云插件

LiDAR點(diǎn)云。


USD導(dǎo)入器

.usd(通用場(chǎng)景描述)


Alembic文件導(dǎo)入器

.abc


如何保存場(chǎng)景?

在Unity中,你將GameObject放在場(chǎng)景中,然后將其保存為場(chǎng)景資產(chǎn)文件。 虛幻引擎使用?貼圖文件(Map file)?,它類(lèi)似于Unity中的場(chǎng)景。 貼圖文件保存了?關(guān)卡?的數(shù)據(jù)、關(guān)卡中對(duì)象、光照數(shù)據(jù)和某些關(guān)卡特定的設(shè)置信息。


如何修改項(xiàng)目設(shè)置?

從虛幻編輯器的主菜單,轉(zhuǎn)至?編輯(Edit)> 項(xiàng)目設(shè)置(Project Settings)?。

就像Unity的項(xiàng)目設(shè)置,這些設(shè)置可實(shí)現(xiàn)以下功能:

  • 控制項(xiàng)目的相關(guān)信息,例如項(xiàng)目名稱(chēng)和圖標(biāo)。

  • 配置游戲輸入綁定。

  • 定義引擎在運(yùn)行項(xiàng)目時(shí)的行為表現(xiàn)。

  • 等等。

Unity還有叫做"玩家設(shè)置(Player Settings)"的部分。在虛幻引擎中,我們叫?平臺(tái)設(shè)置(Platform Settings)?,你可以在?項(xiàng)目設(shè)置(Project Settings)?窗口的?平臺(tái)(Platforms)?分段下配置。


源文件在哪里?

在Unity中,你將C#源文件放在?Assets?文件夾中。在虛幻引擎中,你的源文件放在不同的位置,具體取決于你創(chuàng)建的虛幻項(xiàng)目的類(lèi)型:

  • C++項(xiàng)目?在虛幻項(xiàng)目目錄中有一個(gè)?Source?文件夾。Source?文件夾包含各種文件,包括C++源文件(.cpp)和頭文件(.h),以及一些編譯用的腳本(Build.cs、Target.cs)。

  • 藍(lán)圖項(xiàng)目?沒(méi)有?Source?文件夾。藍(lán)圖可以放在虛幻項(xiàng)目的?Content?文件夾中的任意位置。

如果你想將C++代碼添加到藍(lán)圖項(xiàng)目,請(qǐng)從虛幻編輯器的主菜單轉(zhuǎn)至?工具(Tools)> 新C++類(lèi)(New C++ Class)?。

在?內(nèi)容瀏覽器(Content Browser)?中雙擊C++源文件,可以在Visual Studio(Windows)或Xcode(macOS)中打開(kāi)。


從GameObject到Actor

GameObject在哪里?

在Unity中,GameObject是可以放在世界中的"東西"。虛幻引擎中對(duì)應(yīng)的概念是?Actor?。在虛幻編輯器中,你可以從?主工具欄(Main Toolbar)?中的?創(chuàng)建(Create)?菜單將新的空Actor拖入視口中,如下所示:

https://cdnapisec.kaltura.com/html5/html5lib/v2.98/modules/KalturaSupport/thumbnail.php/p/2501632/uiconf_id/46024782/entry_id/1_pf58xb5p/height/480?&flashvars[parentDomain]=https%3A%2F%2Fdocs.unrealengine.com%2F5.1%2Fzh-CN%2Funreal-engine-for-unity-developers%2F

你雖然可以通過(guò)空Actor來(lái)制作游戲,但虛幻引擎還提供了各類(lèi)特殊的Actor,并預(yù)置了它們的特性,例如?Pawn(用于可以由玩家或AI控制的Actor),或?角色(用于需要復(fù)雜移動(dòng)和交互的可控制玩家角色)。就像空Actor那樣,你可以將這些特殊類(lèi)型的Actor放入視口中,然后添加或自定義其屬性和組件。

虛幻引擎有一種Gameplay框架來(lái)處理這些特殊Actor。你將在后面詳細(xì)了解Gameplay框架。

虛幻引擎中的Actor與Unity中的GameObject稍有不同。在Unity中,GameObject是C#類(lèi),不能直接擴(kuò)展。在虛幻引擎中,Actor是C++類(lèi),可以使用繼承來(lái)擴(kuò)展和自定義。下文會(huì)詳細(xì)介紹繼承的概念。


組件在哪里?

在Unity中,你使用組件向GameObject添加功能。在虛幻引擎中,你將組件添加到Actor。你在關(guān)卡中放入空Actor之后,將其選中,然后點(diǎn)擊?細(xì)節(jié)(Details)?面板中的?添加組件(Add Component)?按鈕,然后選擇要添加的組件。

在下面的視頻中,我們會(huì)創(chuàng)建一把火炬,首先放入一個(gè)空Actor,然后添加一個(gè)網(wǎng)格體組件作為基座,接著添加光源和粒子系統(tǒng)來(lái)創(chuàng)建火焰。

https://cdnapisec.kaltura.com/html5/html5lib/v2.98/modules/KalturaSupport/thumbnail.php/p/2501632/uiconf_id/46024782/entry_id/1_z72hmh9x/height/480?&flashvars[parentDomain]=https%3A%2F%2Fdocs.unrealengine.com%2F5.1%2Fzh-CN%2Funreal-engine-for-unity-developers%2F

在Unity中,GameObject以列表形式保存組件。在虛幻引擎中,Actor以?層級(jí)(Hierarchy)?形式保存組件,而且組件之間相互綁定。你可以在以上示例中看到,光源和粒子與靜態(tài)網(wǎng)格體相互綁定。這會(huì)帶來(lái)一些重要的影響,本頁(yè)面的?復(fù)合對(duì)象?小節(jié)會(huì)進(jìn)行說(shuō)明。


從Unity的Prefab到虛幻引擎的藍(lán)圖類(lèi)

在Unity中,你使用組件構(gòu)建一組GameObject,然后從中創(chuàng)建預(yù)制件(prefab)。接著,你可以在世界中放入預(yù)制件的實(shí)例,或在運(yùn)行時(shí)將其實(shí)例化。

虛幻引擎有相同類(lèi)型的工作流程,但其基于藍(lán)圖類(lèi):

1.使用組件構(gòu)建Actor。

  1. 在Actor的?細(xì)節(jié)(Details)?面板中,點(diǎn)擊?藍(lán)圖(Blueprint)> 添加腳本(Add Script)?,向其添加藍(lán)圖。

  2. 選擇一個(gè)位置保存你的新藍(lán)圖類(lèi)。

  3. 點(diǎn)擊?創(chuàng)建藍(lán)圖(Create Blueprint)?。

這樣就可以了!

你可以從?內(nèi)容瀏覽器(Content Browser)?訪問(wèn)新藍(lán)圖類(lèi)。雙擊?可直接編輯,或?qū)⑵渫先氪蜷_(kāi)的關(guān)卡以放入游戲世界中。


Unity中的Script組件和MonoBehaviour去哪里了?

在Unity中,你通過(guò)將腳本組件放在GameObject上來(lái)添加C#腳本。你通過(guò)創(chuàng)建從MonoBehaviour繼承的類(lèi)來(lái)定義該組件的功能。

虛幻引擎的工作方式相同:你可以使用藍(lán)圖或C++創(chuàng)建全新的組件類(lèi),并將其添加到任意Actor。類(lèi)似于將藍(lán)圖添加到Actor,你可以通過(guò)以下兩種方式之一將組件添加到Actor:

  • 從Actor的?細(xì)節(jié)(Details)?面板。

  • 從?編輯Actor(Edit Actor)?窗口。

將新組件添加到Actor的步驟如下:

  1. 從Actor的?細(xì)節(jié)(Details)?面板或?編輯Actor(Edit Actor)?窗口,點(diǎn)擊?添加組件(Add Component)?。

  2. 選擇要添加到Actor的組件。你可以創(chuàng)建新組件,或從預(yù)定義組件列表中選擇,例如光源、音頻、粒子系統(tǒng),等等。

在Unity中,創(chuàng)建新的MonoBehaviour時(shí),你會(huì)收到一個(gè)骨架類(lèi)文件,其中包含?Start()?函數(shù)和?Update()?函數(shù)。

在虛幻引擎中,新組件有類(lèi)似的函數(shù):

  • InitializeComponent(),其作用與Unity的?Start()` 函數(shù)相同。

  • TickComponent(),其作用與Unity的?Update()` 函數(shù)相同。

在藍(lán)圖組件中,這些函數(shù)顯示為可視化節(jié)點(diǎn)。


可編寫(xiě)腳本的Actor藍(lán)圖類(lèi)

你的新Actor藍(lán)圖類(lèi)會(huì)有自己的藍(lán)圖可視化腳本。這樣一來(lái),你就可以將邏輯添加到整個(gè)對(duì)象,而不僅僅是單個(gè)組件。結(jié)合繼承結(jié)構(gòu)關(guān)系(稍后下文會(huì)解釋?zhuān)?,這會(huì)為你在設(shè)計(jì)游戲時(shí)提供很多靈活性。

除了支持可視化腳本的藍(lán)圖類(lèi)之外,虛幻引擎還支持使用代碼來(lái)實(shí)現(xiàn)C++類(lèi)。下面并排比較了Unity和虛幻引擎代碼,還給出了具有相同作用的虛幻引擎藍(lán)圖。


Unity C#

?


虛幻引擎C++

? ?


藍(lán)圖


藍(lán)圖類(lèi)可以擴(kuò)展

類(lèi)似于Unity的prefab,你也可以在虛幻引擎中將藍(lán)圖類(lèi)實(shí)例化。

在虛幻引擎中,你可以創(chuàng)建新的藍(lán)圖類(lèi),它會(huì)擴(kuò)展現(xiàn)有藍(lán)圖類(lèi),并使用新屬性、組件和可視化腳本功能來(lái)增強(qiáng)。

例如,你可以創(chuàng)建名為Monster的藍(lán)圖類(lèi),用它實(shí)現(xiàn)基本的怪物功能,例如追擊人類(lèi)。然后,你可以再創(chuàng)建一個(gè)藍(lán)圖類(lèi)來(lái)擴(kuò)展它,例如Dragon(會(huì)噴火的怪物)、Grue(只在夜晚出沒(méi)的怪物),以及其他8種類(lèi)型,用來(lái)代表不同種類(lèi)的怪物。Monster的所有這些子類(lèi)都從Monster繼承基本功能,并且還具備自己的新特征和能力。

在Unity中,你需要?jiǎng)?chuàng)建許多不同的GameObject prefab才能實(shí)現(xiàn)這點(diǎn):你要為Dragon創(chuàng)建一個(gè),為Grue創(chuàng)建一個(gè),等等?,F(xiàn)在,假設(shè)你要向所有怪物添加某種新功能,例如添加一個(gè)說(shuō)話組件來(lái)讓他們說(shuō)話。在Unity中,你需要更新所有10個(gè)prefab,逐一將新功能復(fù)制粘貼到其中。

在虛幻引擎中,你只需修改Monster藍(lán)圖類(lèi),即可添加說(shuō)話能力。這樣就可以了!Dragon、Grue以及其他所有8個(gè)Monster子類(lèi)將自動(dòng)繼承新的說(shuō)話功能;你不需要逐一修改。

本小節(jié)中的所有內(nèi)容也都適用于C++類(lèi),以及Actor和組件。這些系統(tǒng)從設(shè)計(jì)之初就能支持大規(guī)模開(kāi)發(fā)可擴(kuò)展功能,可以為10個(gè)開(kāi)發(fā)人員的項(xiàng)目服務(wù),也可以為100個(gè)人的項(xiàng)目服務(wù)。


那么應(yīng)該用藍(lán)圖腳本還是C++代碼呢?或者同時(shí)使用?

藍(lán)圖可視化腳本非常適合簡(jiǎn)單的游戲內(nèi)邏輯和按順序進(jìn)行的事件。這個(gè)系統(tǒng)對(duì)策劃、美術(shù)以及面向可視化編程的程序員是非常好用的,它能以可視化的方式輕松訪問(wèn)并管理游戲內(nèi)對(duì)象。你完全可以?xún)H憑藍(lán)圖完成一個(gè)獨(dú)立小游戲的制作,以及打造其他互動(dòng)式體驗(yàn)。

C++編程適合用于大型任務(wù),例如編寫(xiě)某個(gè)游戲邏輯系統(tǒng)、制造復(fù)雜的AI行為、新增引擎功能。

大部分項(xiàng)目都適合混合使用藍(lán)圖和C++。許多開(kāi)發(fā)人員使用藍(lán)圖來(lái)創(chuàng)作游戲作原型,因?yàn)槭褂盟{(lán)圖很容易制作原型和迭代,但之后之后出于性能優(yōu)化、項(xiàng)目?jī)?yōu)化等考量,他們會(huì)改用C++完成部分或全部工作。


藍(lán)圖類(lèi)可以擴(kuò)展C++類(lèi)

虛幻引擎游戲開(kāi)發(fā)中很多令人著迷的過(guò)程存在于程序員用C++實(shí)現(xiàn)新的功能,而策劃和美術(shù)可以在藍(lán)圖中測(cè)試這些新功能,以便給出切合實(shí)際的反饋。下圖是針對(duì)一個(gè)UE的射擊游戲項(xiàng)目中實(shí)現(xiàn)拾取物品過(guò)程時(shí),團(tuán)隊(duì)的一種形式,混合了C++類(lèi)的系統(tǒng)編程實(shí)現(xiàn),以及藍(lán)圖類(lèi)用于處理行為和表現(xiàn)。


變換組件

在Unity中,每個(gè)GameObject都有一個(gè)變換組件,用于指定該GameObject在世界中的位置、旋轉(zhuǎn)和比例。

虛幻引擎也一樣,Actor有?根組件(Root Component),可以作為場(chǎng)景組件的任意子類(lèi)。場(chǎng)景組件(Scene Component)?指定了Actor在世界中的位置、旋轉(zhuǎn)和比例,這些屬性也應(yīng)用于以該場(chǎng)景組件為父節(jié)點(diǎn)的所有組件。很多有用的組件都是場(chǎng)景組件的子類(lèi),因此讓它們具有位置信息是非常有用的!

即使你放置一個(gè)空Actor,虛幻引擎也會(huì)為該Actor創(chuàng)建默認(rèn)場(chǎng)景根(Default Scene Root),這是一個(gè)最簡(jiǎn)單的場(chǎng)景組件。如果你放入新的場(chǎng)景組件,它將替換默認(rèn)場(chǎng)景根。


復(fù)合對(duì)象

在Unity中,你可以通過(guò)構(gòu)建GameObject層級(jí)以及綁定它們的變換組件來(lái)創(chuàng)建復(fù)合對(duì)象。


在虛幻引擎中,你可以通過(guò)讓組件按照層級(jí)關(guān)系相互嵌套,來(lái)創(chuàng)建復(fù)合游戲?qū)ο蟆?/p>


如圖所示,你可以讓場(chǎng)景組件互相附加來(lái)得到一個(gè)相互嵌套的層級(jí)關(guān)系,因?yàn)樗鼈冇凶儞Q,這類(lèi)似于Unity中的變換綁定。Actor組件(所有組件的基類(lèi))只能直接綁定到Actor本身。


我需要用組件構(gòu)建一切嗎?

這完全取決于你自己!通常,你應(yīng)該是結(jié)合使用自定義組件類(lèi)型,以及使用這些組件的Actor類(lèi)。如前所述,虛幻引擎有許多特殊類(lèi)型的Actor,它們附帶一定的功能,并始終包含特定組件。例如,角色(Character)?始終包含?角色移動(dòng)組件(Character Movement Component)?。

下面是一些常用的虛幻引擎Actor:

  • Pawn?- 一種Actor,用于表示可控制的游戲?qū)ο螅热缤婕也倏氐慕巧?。玩家和AI都可以通過(guò)所屬控制器移動(dòng)Pawn。

  • 角色(Character)?- 一種版本更特殊的Pawn,用于雙足類(lèi)型的角色(角色有類(lèi)似于人類(lèi)的骨骼結(jié)構(gòu),用兩條腿行走)。

  • 控制器(Controller)?- 占有并控制Pawn。通過(guò)將Pawn與控制器分離,你可以編寫(xiě)AI控制器,用于控制Pawn,并且和玩家控制Pawn采用相同的接口。

  • 玩家控制器(Player Controller)?- 一種更特殊的控制器,用于從玩家的游戲手柄、觸控板、鼠標(biāo)/鍵盤(pán)獲取輸入信息,并使用這些信息驅(qū)動(dòng)玩家所控制的Pawn或角色的行為。

那么一切都是Actor嗎?

并非如此。Actor?是虛幻引擎中最常用于Gameplay的類(lèi),并且是唯一可以在?世界?中?生成?的類(lèi)型。換句話說(shuō),你放入關(guān)卡中的一切內(nèi)容都將是Actor。

另一個(gè)需要知道的重要類(lèi)型是?Object?。Object實(shí)際上是所有虛幻的類(lèi)的基類(lèi),包括?Actor?和其他許多類(lèi)。它是比Actor級(jí)別低得多的類(lèi),但作為虛幻中的類(lèi),它仍擁有一些基本功能,例如?反射?和?序列化?。Object是一個(gè)非常基礎(chǔ)的類(lèi),如果你需要定義一個(gè)新類(lèi)型但又并非?Actor?時(shí),就會(huì)使用它。例如,Actor組件?是所有組件的基類(lèi),派生自?Object?而不是?Actor?。


虛幻引擎中的Gameplay框架是什么?

當(dāng)你開(kāi)始新的Unity項(xiàng)目時(shí),你必須手動(dòng)填充GameObject和組件等事項(xiàng)。虛幻引擎也一樣,你可以使用Actor和組件構(gòu)建游戲。但是,虛幻引擎有一個(gè)額外的層,稱(chēng)為Gameplay框架。如果你使用特定圖元類(lèi)并遵循特定規(guī)范,你的游戲?qū)⒆詣?dòng)獲得原本實(shí)現(xiàn)起來(lái)困難又費(fèi)時(shí)的額外功能(例如,完全多玩家支持)。

要使用Gameplay框架,你需要了解如何使用和自定義虛幻引擎隨附的內(nèi)置Actor類(lèi),例如?Pawn角色(Character)?和?玩家控制器(Player Controller)?。例如,如果你想實(shí)現(xiàn)多玩家,你還需要熟悉虛幻引擎中網(wǎng)絡(luò)和復(fù)制的工作方式。


在虛幻引擎中編寫(xiě)代碼

寫(xiě)給C++程序員

假如是編寫(xiě)藍(lán)圖,你只需要用到虛幻引擎。你所需的所有功能已包括在內(nèi)。

假如要編寫(xiě)C++代碼,你還要在Windows上下載Visual Studio,或在macOS上安裝Xcode。當(dāng)你首次在虛幻引擎中創(chuàng)建新的C++項(xiàng)目(或?qū)++代碼添加到現(xiàn)有項(xiàng)目)時(shí),虛幻引擎將自動(dòng)創(chuàng)建Visual Studio項(xiàng)目文件。

從虛幻引擎項(xiàng)目訪問(wèn)Visual Studio的方法有以下兩種:

  • 在?內(nèi)容瀏覽器(Content Browser)?中,雙擊?C++類(lèi)在Visual Studio中打開(kāi)。

  • 從主菜單,轉(zhuǎn)至?工具(Tools)>?打開(kāi)Visual Studio(Open Visual Studio)?。僅當(dāng)你的項(xiàng)目包含至少一個(gè)C++類(lèi)時(shí),才會(huì)顯示此選項(xiàng)。

虛幻引擎有一點(diǎn)很不同:有時(shí)必須手動(dòng)刷新Visual Studio項(xiàng)目文件(例如,下載新版虛幻引擎后,或手動(dòng)更改磁盤(pán)上的源文件位置時(shí))。要這樣做,可以采用以下兩種方法:

  • 從虛幻引擎的主菜單,轉(zhuǎn)至?工具(Tools)> 刷新Visual Studio項(xiàng)目(Refresh Visual Studio Project)?。

  • Right-click?the?.uproject?file in your project's directory and select?Generate Visual Studio project files.

編寫(xiě)事件函數(shù)(Start、Update等)

如果你用過(guò)MonoBehavior,那你應(yīng)該熟悉?Start?、?Update?和?OnDestroy?等方法。下面比較了Unity的行為與對(duì)應(yīng)的虛幻引擎Actor和組件的行為。

在Unity中,某個(gè)基本組件的代碼可能是這樣:

在虛幻引擎中,你可以在Actor本身上編寫(xiě)代碼,而不是僅僅對(duì)新組件類(lèi)型編碼。這實(shí)際上十分常見(jiàn)且有用。虛幻引擎Actor有一組類(lèi)似于Unity `Start` `OnDestroy` `Update` 函數(shù)的方法。如下所示:

C++


藍(lán)圖


虛幻引擎中的組件包含不同的函數(shù)。下面是一個(gè)基本示例:

C++


藍(lán)圖


記住,在虛幻引擎中,你必須調(diào)用方法的父類(lèi)版本。

例如,在Unity C#中,可能是調(diào)用?base.Update(),但在虛幻引擎C++中,你將使用?Super::TickComponent()


在C++中,一些類(lèi)使用以?A?開(kāi)頭,而另一些類(lèi)以?U?開(kāi)頭。A?表示Actor子類(lèi),而?U?表示?Object?子類(lèi)。另一個(gè)常用前綴是?F?,它用于大部分普通數(shù)據(jù)結(jié)構(gòu)和非UObject類(lèi)。


在虛幻引擎中編寫(xiě)游戲邏輯代碼

下一小節(jié)介紹一些高級(jí)虛幻引擎編程概念。下面的說(shuō)明假定你熟悉Unity C#并想學(xué)習(xí)虛幻引擎C++。話雖如此,在大部分情況下,你還可以使用藍(lán)圖并獲得相同結(jié)果,因此我們盡可能同時(shí)添加了C++和藍(lán)圖的示例。

現(xiàn)在來(lái)看一些最常見(jiàn)的游戲邏輯編程模式,以及如何在虛幻引擎中實(shí)現(xiàn)它們。下面的示例介紹了一些常見(jiàn)Unity函數(shù),以及如何在虛幻引擎中實(shí)現(xiàn)相同功能。


實(shí)例化GameObject/生成Actor

在Unity中,你會(huì)使用?Instantiate?函數(shù)創(chuàng)建對(duì)象的新實(shí)例。此函數(shù)可以獲取任意?UnityEngine.Object?類(lèi)型(GameObject、MonoBehaviour等),并創(chuàng)建其副本。


虛幻引擎有兩個(gè)不同的函數(shù)來(lái)實(shí)例化對(duì)象:

  • NewObject?用于創(chuàng)建新的?UObject?類(lèi)型。

  • SpawnActor?用于生成?AActor?類(lèi)型。

UObject和NewObject

在虛幻引擎中創(chuàng)建?UObject?的子類(lèi)與在Unity中創(chuàng)建?ScriptableObject?的子類(lèi)非常類(lèi)似。對(duì)于不需要生成到世界中或像Actor那樣綁定了組件的Gameplay類(lèi),這些很有用。

在Unity中,如果你創(chuàng)建自己的?ScriptableObject?子類(lèi),你會(huì)如下所示將其實(shí)例化:


在虛幻引擎中,如果你創(chuàng)建自己的?UObject?派生類(lèi)型,你可以如下所示將其實(shí)例化:


AActor和SpawnActor

Actor使用World(C++中的?UWorld)對(duì)象上的?SpawnActor?方法生成。一些UObject提供了?GetWorld?方法(例如,所有Actor都如此)。你會(huì)采用此方法獲取World對(duì)象。

請(qǐng)注意,在下面的示例中,我們傳入了我們想生成的Actor的類(lèi),而不是傳入另一個(gè)Actor。在我們的示例中,該類(lèi)可以是AMyEnemy的任意子類(lèi)。

要是你想創(chuàng)建另一個(gè)對(duì)象的副本,就像在Unity的Instantiate函數(shù)那樣,你該怎么做呢?

NewObject?和?SpawnActor?函數(shù)也能給一個(gè)"模板"對(duì)象來(lái)工作。虛幻引擎將創(chuàng)建該對(duì)象的副本,而不是從頭創(chuàng)建新對(duì)象。這將復(fù)制其所有UPROPERTY和組件。


你可能會(huì)好奇這里的"從頭開(kāi)始"到底是什么意思。你創(chuàng)建的每個(gè)對(duì)象類(lèi)都有一個(gè)默認(rèn)模板,其中包含其屬性和組件的默認(rèn)值。如果你不覆蓋這些屬性,也沒(méi)有提供你自己的模板,虛幻引擎將使用這些默認(rèn)值來(lái)構(gòu)造你的對(duì)象。為了更好地說(shuō)明這一點(diǎn),我們首先來(lái)看一下MonoBehaviour示例:


在上面的示例中,我們有一個(gè)默認(rèn)為42的?int?屬性,以及默認(rèn)為半徑20的?SphereCollider?組件。

我們可以在虛幻引擎中使用對(duì)象的構(gòu)造函數(shù)實(shí)現(xiàn)相同的效果:


在構(gòu)造函數(shù)?AMyActor?中,我們?yōu)檫@個(gè)類(lèi)設(shè)置了屬性的默認(rèn)值。請(qǐng)注意?CreateDefaultSubobject?函數(shù)的用法,我們可以使用此函數(shù)創(chuàng)建組件并向其分配默認(rèn)屬性。使用此函數(shù)創(chuàng)建的所有子對(duì)象都充當(dāng)默認(rèn)模板,因此我們可以在子類(lèi)或藍(lán)圖中修改它們。


類(lèi)型轉(zhuǎn)換

在此例中,我們獲取了一個(gè)已知的組件,將其轉(zhuǎn)換為特定類(lèi)型,然后判斷能否執(zhí)行一些操作。

Unity C#


虛幻引擎C++


銷(xiāo)毀GameObject/Actor


Unity

? ?Destroy(MyGameObject);

C++

? ?MyActor->Destroy();

藍(lán)圖


銷(xiāo)毀GameObject/Actor(延遲1秒)


Unity

? ?Destroy(MyGameObject, 1);

C++

? ?MyActor->SetLifeSpan(1);

藍(lán)圖

禁用GameObject/Actor


Unity

? ?MyGameObject.SetActive(false);

C++

? ?


藍(lán)圖


從組件訪問(wèn)GameObject/Actor


Unity

? ?GameObject ParentGO = ? ?MyComponent.gameObject;

C++

? ? AActor* ParentActor = ? ? MyComponent->GetOwner();

藍(lán)圖


從GameObject/Actor訪問(wèn)組件

Unity C#

MyComponent MyComp = gameObject.GetComponent<MyComponent>();

虛幻引擎C++

UMyComponent* MyComp = MyActor->FindComponentByClass<UMyComponent>();

藍(lán)圖

?


查找GameObject/Actor

Unity C#

// 按名稱(chēng)查找GameObject


虛幻引擎C++


藍(lán)圖


虛幻引擎C++


藍(lán)圖


向GameObject/Actor添加標(biāo)簽

Unity C#

MyGameObject.tag = "MyTag";


虛幻引擎C++

// Actor可以有多個(gè)標(biāo)簽

MyActor.Tags.AddUnique(TEXT("MyTag"));


藍(lán)圖


向MonoBehaviour/ActorComponent添加標(biāo)簽

Unity C#

// 這會(huì)更改它綁定到的GameObject上的標(biāo)簽

MyComponent.tag = "MyTag";


虛幻引擎C++

// 組件有自己的標(biāo)簽數(shù)組MyComponent.ComponentTags.AddUnique(TEXT("MyTag"));


比較GameObject/Actor和MonoBehaviour/ActorComponent上的標(biāo)簽

Unity C#


虛幻引擎C++


藍(lán)圖


虛幻引擎C++


藍(lán)圖


物理:剛體與圖元組件

在Unity中,假如要為GameObject賦予物理特征,首先必須為其提供剛體組件。

在虛幻引擎中,任何圖元組件(C++中的?UPrimitiveComponent)都可以是物理對(duì)象。一些常見(jiàn)圖元組件如下:

  • 形狀組件(膠囊體、球體和盒體)

  • 靜態(tài)網(wǎng)格體組件

  • 骨骼網(wǎng)格體組件

Unity將碰撞和可視性劃分到不同的組件中,虛幻引擎則將"潛在的物理碰撞"和"潛在的可視效果"組合到了單個(gè)圖元組件中。凡是在世界中具有形狀的組件,只要能通過(guò)物理方式渲染或交互,都是?PrimitiveComponent?的子類(lèi)。


層與通道

虛幻引擎中的碰撞通道對(duì)應(yīng)Unity中的層。


RayCast與RayTrace

Unity C#


虛幻引擎C++


藍(lán)圖

觸發(fā)器體積

Unity C#


虛幻引擎C++


虛幻引擎藍(lán)圖



剛體運(yùn)動(dòng)

Unity C#


在虛幻引擎4中,碰撞組件和剛體組件是同一個(gè)組件。其基類(lèi)是?UPrimitiveComponent,它有許多子類(lèi)(USphereComponent、UCapsuleComponent?等)可滿足你的需要。


虛幻引擎C++


輸入事件

Unity C#


虛幻引擎C++:


藍(lán)圖


你的項(xiàng)目設(shè)置中的輸入屬性可能如下所示:



常見(jiàn)問(wèn)題解答

如何自動(dòng)加載最后一個(gè)項(xiàng)目?

你可以將虛幻引擎配置為在啟動(dòng)時(shí)自動(dòng)加載你之前處理的最后一個(gè)項(xiàng)目。從Epic啟動(dòng)程序打開(kāi)項(xiàng)目時(shí),在虛幻引擎啟動(dòng)屏幕上啟用?在啟動(dòng)時(shí)總是加載最后一個(gè)項(xiàng)目(Always Load Last Project on Startup)?選項(xiàng)。


哪里可以設(shè)置游戲的輸入綁定?

在Unity中,你使用項(xiàng)目的輸入管理器設(shè)置來(lái)設(shè)置默認(rèn)綁定。

在虛幻引擎中,你從?項(xiàng)目設(shè)置(Project Settings)?窗口中的?輸入(Input)?類(lèi)別配置輸入綁定。在此窗口中,你可以添加各種按鈕(操作)和模擬功能按鈕(軸)。為每個(gè)功能按鈕提供名稱(chēng)和默認(rèn)綁定。這樣做之后,你就可以在觸發(fā)輸入事件時(shí)獲得對(duì)游戲的Pawn的回調(diào)。


如何更改項(xiàng)目的初始場(chǎng)景?

默認(rèn)情況下,虛幻引擎會(huì)在你打開(kāi)項(xiàng)目時(shí)加載默認(rèn)關(guān)卡。你可以在?項(xiàng)目設(shè)置(Project Settings)?窗口(主菜單:編輯(Edit)> 項(xiàng)目設(shè)置(Project Settings))中的?通用(General)> 加載和保存(Loading & Saving)類(lèi)別中更改此行為。


如何運(yùn)行游戲?

有多種方式可試玩(運(yùn)行)你的游戲:

  • 直接在虛幻編輯器中運(yùn)行,方法是點(diǎn)擊?主工具欄(Main Toolbar)?上的?運(yùn)行(Play)?按鈕。

  • 作為獨(dú)立的程序運(yùn)行,方法是點(diǎn)擊?主工具欄(Main Toolbar)?上的?平臺(tái)(Platforms)?按鈕,然后從下拉列表中選擇你的機(jī)器。請(qǐng)注意,這會(huì)首先為你的平臺(tái)編譯一個(gè)可執(zhí)行文件;例如,如果你在Windows機(jī)器上工作,這將構(gòu)建Windows可執(zhí)行文件。

  • 在不同的平臺(tái)(例如,移動(dòng)設(shè)備或Web瀏覽器)上運(yùn)行,方法是點(diǎn)擊?主工具欄(Main Toolbar)?上的?平臺(tái)(Platforms)?按鈕,然后選擇你想運(yùn)行游戲的平臺(tái)。請(qǐng)注意,你需要首先安裝所有必需的軟件。


虛幻引擎使用什么測(cè)量單位?

在Unity中,主要的測(cè)量單位是一米。在虛幻引擎中,主要測(cè)量單位是一厘米。

因此,在Unity中移動(dòng)一個(gè)單位(米)相當(dāng)于在虛幻引擎中移動(dòng)100個(gè)單位(厘米)。

如果你想在Unity中移動(dòng)2英尺,那就是0.61個(gè)單位(米)。在虛幻引擎中,這相當(dāng)于61個(gè)單位(厘米)。


在虛幻引擎的坐標(biāo)系中,哪個(gè)方向朝上?

Unity和虛幻引擎都使用左手坐標(biāo)系,但坐標(biāo)軸的命名方式不同。在虛幻引擎中,X的正方向是"前",Y的正方向是"右",Z的正方向是"上"。


如何查看游戲的輸出日志?

點(diǎn)擊?底部工具欄?中的?輸出日志(Output Log)?按鈕。


如何拋出異常?

不同于Unity,虛幻引擎并不處理異常。請(qǐng)改用?check()?函數(shù)來(lái)觸發(fā)嚴(yán)重的斷言錯(cuò)誤。你可以傳入錯(cuò)誤信息提示。如果你想報(bào)告錯(cuò)誤,但不希望打斷程序,請(qǐng)改用?ensure()。這將記錄一個(gè)帶有完整調(diào)用堆棧的錯(cuò)誤信息,但程序會(huì)繼續(xù)執(zhí)行。如果你附加了調(diào)試器,那么這兩個(gè)函數(shù)都會(huì)暫定并進(jìn)入調(diào)試器。


.NET Framework在哪里?

不同于Unity,虛幻引擎并不使用.NET Framework。虛幻引擎有自己的一套容器類(lèi)和庫(kù)。下面列出了常見(jiàn)的容器比較:


String

FString,F(xiàn)Text


List

TArray


Dictionary

TMap


HashSet

TSet


代碼更改時(shí)虛幻引擎是否會(huì)自動(dòng)重新加載?

會(huì)!你在編寫(xiě)代碼時(shí),可以將編輯器保持開(kāi)啟的狀態(tài)。完成代碼編輯后,從Visual Studio啟動(dòng)編譯,編輯器將自動(dòng)"熱重新加載"你的更改。


查找?guī)椭痛鸢?/h1>


要詳細(xì)了解虛幻引擎,你可以參考本文檔網(wǎng)站的其余部分,或訪問(wèn)下面的資源:

  • YouTube上的虛幻引擎

    https://www.youtube.com/c/UnrealEngine/playlists

  • 論壇

    https://forums.unrealengine.com

  • 社區(qū)資源

    https://www.unrealengine.com/en-US/community


基礎(chǔ)知識(shí)-為Unity開(kāi)發(fā)準(zhǔn)備的指南的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
海南省| 尤溪县| 江西省| 天柱县| 洪洞县| 唐海县| 乌拉特前旗| 罗城| 鄯善县| 舒兰市| 克拉玛依市| 新丰县| 常宁市| 绥棱县| 石泉县| 光泽县| 太原市| 禹州市| 同江市| 潞城市| 翼城县| 凤城市| 兖州市| 道孚县| 融水| 双城市| 平塘县| 扶沟县| 务川| 嘉义市| 和静县| 张家口市| 正镶白旗| 准格尔旗| 马龙县| 宽城| 泰和县| 虞城县| 凤阳县| 巧家县| 靖江市|