關于3D的學習文章,算上本篇,我一共寫了兩篇。上一篇是面向零3D基礎的《科普:零基礎了解3D遊戲開發》。這篇是學習LayaAir3D引擎的入門級必讀文章,也可以作為使用LayaAir引擎開發3D項目美術同學随時查閱的手冊。
由于LayaAir引擎目前是依托于Unity工具編輯3D場景并導出資源的,那Unity中到底是哪些功能可以用,哪些功能不可用,本文會進行全面和系統的介紹。
一、3D場景編輯器的研發規劃
有開發者問過LayaAir引擎是否會有自己的3D場景編輯器,首先可以肯定的講,一定會有。3D編輯器是LayaAir3.x引擎規劃的基礎組成部分(3.x正在研發中)。
采用Unity插件方案的主要原因,一是可以讓有Unity經驗的優質開發者可以更低學習成本進入HTML5和小遊戲産業中來。二是1.x和2.x引擎還處于功能豐富的階段,引擎功能與Unity還有差距,是以這個階段以完善引擎功能為主,讓小遊戲産業的衆多3D遊戲開發者可以使用更多3D渲染能力,讓3D産品的表現更自由、更豐富、更炫酷。是以我們把更多精力先放到引擎功能的研發上。工具方面保障不影響開發者的開發工作流即可。
随着引擎功能越來越豐富,目前甚至擁有大量Unity也不具有的特色引擎功能,是以自有3D編輯器也在研發進行中,未來與LayaAir 3.x引擎一起推出。
本篇,我們将全面學習Unity的插件工具使用,以及LayaAir引擎支援Unity中的哪些功能。由于Unity的學習資料非常豐富,即便是沒有用過Unity的開發者,在閱讀本篇遇到不能了解的地方,也可以通過本篇中的關鍵字百度搜尋答案。
如果是沒有使用過Unity的開發者,不需要系統學習全部Unity工具功能與引擎。僅需通過本篇文檔的支援清單,來了解LayaAir引擎支援的功能使用即可。
二、LayaAir的3D場景編輯環境配置
在目前,建立LayaAir引擎項目和編輯UI是基于自研的工具LayaAirIDE。而編輯3D場景是基于第三方工具Unity以及我們自研的LayaAir引擎Unity插件。是以本小節先引導大家安裝好這些基礎的工具與開發環境。
2.1、下載下傳Unity編輯器工具
LayaAir引擎的Unity插件不會支援導出Unity所有的功能,畢竟不是同一個引擎,具體支援哪些後面會詳細介紹。
是以,我們的插件工具也不需要支援Unity所有的版本,開發者要根據引擎的版本來選擇安裝不同的Unity版本。
2.1.1 Unity 5.6.x版本
在LayaAir 2.3版本之前(不含2.3)支援采用Unity5.6.x的版本進行3D場景的編輯。
國内下載下傳位址:https://unity.cn/releases?signup=true
國際下載下傳位址:https://unity3d.com/get-unity/download/archive
需要登陸,再找到對應的曆史版本
2.1.2 Unity 2018.4.7版本
從LayaAir 2.3版本開始(含2.3)支援采用2018.4.7進行3D場景的編輯。
有的開發者會問其他版本的行不行,例如Unity 2019或者2018的其他版本。
如果是小版本的差别,例如2018.4.x的其他系列版本,理論上是沒有問題的,但是建議采用2018.4.7。因為2018.4.7版本是經過我們每次的插件發版測試的版本。
但是,開發者要是采用了例如2019.x等其他版本,則可能會使用到一些2018.4.7不支援的功能,這樣就會在導出時報錯,或者出現LayaAir引擎運作效果與unity編輯效果不一緻的情況。是以開發者盡可能采用我們推薦的Unity版本2018.4.7。
國内下載下傳位址:https://unity.cn/releases?signup=true
國際下載下傳位址:https://unity3d.com/get-unity/download/archive
需要登陸,再找到對應的曆史版本
2.2 、下載下傳LayaAir的unity插件
2.2.1 下載下傳位址
LayaAir引擎unity插件下載下傳位址:
https://ldc2.layabox.com/layadownload/?type=layaairide
2.2.2 要對應的版本
LayaAir引擎unity插件在下載下傳時,一定要對應好引擎的版本号,
例如,引擎采用的是2.6.1,那插件也需要去LayaAirIDE 2.6.1版本下載下傳頁面中去下載下傳對應的
Unity3D插件
版本,如下圖所示。否則可能因為引擎與插件的功能支援沒有對應,導緻運作報錯。

這裡需要重點提醒的是,
插件對應的是引擎版本,不是IDE版本。
有些開發者,以為更新了LayaAirIDE的版本,就是對應了引擎版本,并不是這樣。
切換引擎版本,是在LayaAirIDE裡點開左上角IDE圖示,打開菜單
項目 -> 類庫管理 -> 下載下傳(并選中引擎庫版本) -> 應用
切換引擎類庫。
2.3、 導入LayaAir的Unity插件
Unity裡有一個導入自定義包的功能,通過這個功能,可以在Unity裡導入LayaAir引擎提供的專屬功能包,用來導出Unity裡編輯好的場景和資源,然後再用以LayaAir引擎3D的開發。在Unity裡導入這個自定義的LayaAir功能包的過程,我們可以視為安裝了一個LayaAir引擎資源導出的Unity插件。本小節會針對這個過程進行詳細介紹。
2.3.1 建立一個空項目
除非是在已經安裝過LayaAir3D插件的Unity項目上進行更新安裝,否則,
我們建議去建立一個新的空項目。
因為直接打開一個Unity已有項目,可能會有沖突,會導緻插件安裝不成功。
如果想使用已有Unity項目的場景資源和編輯好的場景,建議在Unity空項目裡安裝好LayaAir引擎的插件,然後再把舊項目的資源目錄(也就是Unity項目中的Assets目錄)複制到建立的項目裡。
Tips: 舊項目中的其他檔案對于導出插件而言都用不上,隻複制Assets目錄即可
2.3.2 兩種插件導入方式(項目中首次安裝)
菜單式導入
在資源菜單Assets或者資源面闆的Assets,右鍵
import Package-> custom Package
,如下圖所示。
(上圖為從菜單導入)
(上圖為從資源面闆導入)
以上的兩種導入方式,任選一種點開後,選擇之前下載下傳好的LayaAir引擎unity插件(xx.unitypackage)打開,如下圖所示。
點選
打開
後,會有插件包含的内容清單展示,如果有我們不想要的功能,比如在Unity裡直接預覽這個功能不想要,也可以把相關預設的勾選去掉,但是我們建議全部導入(預設就是)。
是以,我們直接點選
Import
按鈕,開始全部導入,即可。
導入完成後,我們可以看到菜單欄多出一個
LayaAir3D
,如下圖所示。此時說明,已經導入成功。
拖拽式導入
拖拽式安裝的操作方式是把下載下傳好的插件(xx.unitypackage)直接拖拽到Assets面闆下,如下圖所示。其他後續操作與菜單式安裝一樣。就不重複介紹了。
插件導入安裝的提醒
對于Unity還不太熟悉的開發者,需要提醒的是,LayaAir引擎Unity插件,不是一次導入所有項目通用,本質上這并不是真的為Unity安裝工具插件,而是為項目導入自定義的功能包,雖然我們可以了解為工具插件,但要明白這個插件的本質。是以,在每次建立新的項目工程後,都要重複上面導入LayaAir插件包的過程。
2.3.3 更新版本的安裝
當LayaAir引擎與Unity插件出現了新版本,我們打算在已導入插件的項目上進行更新的時候,不僅要更新引擎,還要下載下傳對應引擎版本的LayaAir引擎Unity插件。
然後,将資源目錄(Assets)下的
LayaAir3D
與
StreamingAssets
檔案夾删除,如下圖所示。然後再按照首次安裝的方式,去安裝下載下傳的新版本Unity插件。
三、初識LayaAir的Unity插件功能子產品
當LayaAir的Unity插件導入成功(安裝)後,在Unity中能見到的主要是三個組成子產品,我們先對這幾個組成模闆進行初步的了解。
3.1、LayaAir3D菜單
成功導入插件包後,會在菜單欄看到LayaAir3D的菜單清單項,如下圖所示。
3.1.1 帳号 Account
插件工具的功能,一部分是免費的常用與通用功能,另一部分是不影響開發者使用,或者是可以自己找到第三方替代方案,但使用插件內建更友善或者效果更好的增值(VIP)功能。
當要使用VIP(增值)功能時,需要從LayaAir3D菜單項的Account登入帳号,購買或使用VIP功能。
關于VIP的具體功能,在後面會有詳細介紹的部分,這裡重點介紹帳号(Account)
點選LayaAir3D菜單項的Account,彈出登入界面如下圖所示。如果已有社群(ask.layabox.com)開發者帳号的開發者可以直接登入,否則也可以點選這個界面的文本連結
注冊
,跳轉到注冊網頁。
當開發者登入後,界面如下圖所示,如果是已購買VIP的帳号,在帳号名下會顯示VIP到期時間。否則,會不顯示到期時間,皇冠圖示也是灰色的。
充值
按鈕用來購買VIP授權時間,或者續費延長時間。
首次充值,如果因網絡原因,帳号權限未能即時重新整理時,可以通過點選或者
重新整理
重新登入來解決。
退出
發票
按鈕可以跳轉到發票申請的網頁。
VIP功能
的描述,為了不占用空間,顯示的并不全,可以點選了解更多,跳轉到全面介紹的文檔(https://ldc2.layabox.com/doc/?nav=zh-ts-0-3-3)進行檢視。
綁定裝置
是插件自動識别的,無需手動綁定,但如果裝置綁定達到帳号上限,需要切換裝置時,需要點選
解綁
,才能在其它的裝置上登入該帳号。此時目前裝置則無法再登入成功。
3.1.2 導出工具 Export Tool
點選菜單
LayaAir3D
—>
Export Tool
,會彈出如下圖所示的導出工具面闆。這個面闆可以拖拽到我們習慣的位置上,這是開發者導出Unity中場景與資源的最核心面闆,後面會有詳細的介紹,這裡就不多做闡述。
3.1.3 快捷功能 shortcut
LayaAir3D
的菜單項
Shortcuts
是快捷功能,目前有兩個快捷功能,如下圖所示:
Switch to LayaAir3D BlinnPhongMateria Shader
Switch to LayaAir3D BlinnPhongMateria Shader
可以将Unity的材質一鍵轉換成為LayaAir引擎BlinnPhong材質。
Switch to LayaAir3D PBRStandardMaterial Shader
Switch to LayaAir3D PBRStandardMaterial Shader
可以将Unity的材質一鍵轉換成為LayaAir引擎PBRStandard材質。
一鍵轉換材質的重要提示:
Unity的材質是不能在LayaAir引擎中使用的,是以,開發者必須要使用LayaAir引擎中提供的材質。如何切換LayaAir的材質,本文後面還會有介紹,這裡提供兩種常用材質的一鍵轉換功能,比較友善實用。在資源導出前,如果以上的材質符合項目需求,可以在這裡快速的切換為LayaAir引擎的材質。
3.1.4 幫助 help
幫助菜單項裡,下級菜單有
示例Demo
、
學習文檔Study
、
問答社群Answsers
這些外鍊菜單項,友善開發者快速進入對應的官網頁面中。還有
插件導出功能說明Tutorial
、
插件版本About LayaAir
,如下圖所示。
幫助菜單項的下級菜單,這裡就不去詳細介紹了,基本上點開就能了解,其中的
插件導出功能說明Tutorial
是介紹了目前插件支援哪些Unity功能導出,如果不能了解的也沒關系,在本文中還會有相關的介紹。
3.1.5 設定 Setting
設定項,目前隻有一個可配置功能,就是插件的語言(Language),預設是中文,如下圖所示。
習慣了英文界面的開發者,可以在這裡配置成為English語言。
3.2、 資源面闆Assets
插件導入成功後,開發者可以在Unity的Assets(資源)面闆中,看到新增了兩個目錄,
LayaAir3D
和
StreamingAssets
。如下圖所示。
這兩個目錄開發者都不需要動,這裡簡單概述一下,開發者知道即可。
3.2.1 LayaAir3D 目錄
LayaShader
LayaShader
LayaShader目錄下是LayaAir引擎下的材質等Shader。
LayaSupoortList
LayaSupoortList
LayaSupoortList目錄下是插件支援的功能清單文檔,不過建議看我的這篇,更全更細。
LayaTool
LayaTool
LayaTool目錄是插件功能操作面闆的功能實作目錄。
3.2.2 StreamingAssets 目錄
StreamingAssets目錄下,隻有一個LayaDemo目錄,這裡不是示例目錄,是效果預覽的anywher(本地Server)等環境目錄。如果不需要在Unity裡直接預覽LayaAir引擎運作效果,該目錄也可以删除,但建議保留。
新手注意:
對于剛接觸LayaAir引擎新手,這裡要重點強調一下,預覽功能必須要先全局安裝Node環境(推薦安裝Node 10.x版本),我們看到上一個圖中的StreamingAssets目錄結構就可以看出,正常的目錄結構需要node_modules,如果沒有安裝Node環境,目錄結構與上圖結構不符,預覽功能也就無法正常使用。
當然,如果沒有安裝Node環境就直接預覽(Run),插件工具也會提示下載下傳安裝Node環境,安裝後需要重新開機Unity才會重生效,如果遇到重新開機Unity仍未生效的情況,建議重新開機電腦。
3.3、導出工具操作面闆
之前的小節有介紹過,通過頂部菜單的
Export Tool
,可以彈出一個導出工具面闆,如下圖所示。
之前是中文界面,下圖換成了英文界面。
上圖這個面闆,就是插件最核心的導出操作子產品,日常的插件導出資源或場景操作,VIP功能的使用等,全是通過這裡完成,在這個小節裡,我們先對主要的功能,有個概括的認知,在後續的章節裡,我們再分别詳細介紹。
3.3.1 場景預覽 Run、QRcode
在Unity中編輯好場景後,可以在不導出的情況下,直接基于LayaAir引擎快速預覽,友善美術直接在Unity中檢視運作效果。
預覽功能有兩個,一個是PC上檢視運作效果的
Run(預覽)
,另一個是在手機上檢視運作效果的
QRCode(二維碼)
。如下圖所示。
場景中需要至少有一個Camera,調整好角度位置,在符合LayaAir引擎插件使用規範的情況下,基于LayaAir引擎的預覽運作效果将會與Unity運作結果一緻,如果不一樣,需要檢查是否使用了引擎不支援的功能。
3.3.2 導出 Export
在符合LayaAir引擎插件使用規範的情況下,可以直接使用Export(導出)按鈕,将Unity中編輯好的場景或者模型直接導出來。
設定導出路徑
在首次使用導出功能前,需要先在插件的底部,在
Save Path(導出路徑)
這一欄,點選Browse(浏覽)選擇好要導出的根目錄位置。然後再點Export(導出)。如下圖所示。
無論是導出場景還是導出預設,這裡的操作都是一樣的。
導出成功與導出資訊
當點選
Export(導出)
後,要注意Console面闆,導出過程完成後,可以在Console面闆内看到
LayaAir3D UnityPlugin: Exporting Success
這樣的文字,此時,說明
Export(導出)
完成了,如下圖所示。
導出完成并不是終點,是不是真的成功導出,還要留意Console面闆中,在導出時是否有報錯或者警告,如果有,需要解決好報錯和警告中提示的問題後再重新導出。否則運作效果可能與Unity中不同。
自定義導出目錄的名稱
插件功能的下方有一個
Other Setting(其它設定)
,如果按從上至下的順序介紹,應該最後講。這裡因為與導出設定關聯緊密,我們就先來介紹一下。
Other Setting(其它設定)
裡,目前隻有一個選項,叫
Customize Export Root Directory Name(自定義導出目錄名稱)
,如下圖所示,我們的根目錄
Save Path(導出路徑)
這裡設定的是
E:/Game/3D
,當自定義目錄名為test時,最終導出的資源全路徑實際為
E:/Game/3D/test
。
如果不勾選
Customize Export Root Directory Name(自定義導出目錄名稱)
,預設的資源目錄名稱為插件按
“LayaScene_ + 場景名”
這個規則自動生成。比如我們的場景名為AAA,那麼最終導出的資源全路徑實際為
E:/Game/3D/LayaScene_AAA
。
3.3.3 場景導出與預設導出的差別
Scene3D與Sprite3D分别是場景導出的配置項和預設導出的配置項。如下圖所示。
場景Scene3D
場景Scene3D
采用
Scene3D(場景)
選項導出,會導出整個3D場景,無論場景中的模型、材質、貼圖、動畫、還是光照貼圖全部導出。主要用于整個場景的制作導出和直接使用,導出後的檔案擴充名是
.ls
。在LayaAir引擎中,需要用Scene3D類或它的繼承類加載。
預設Sprite3D
預設Sprite3D
Sprite3D選項,是指的Unity中的預設導出,中文語言版本這裡顯示的就是預設,由于該項導出後需要以LayaAir引擎的Sprite3D類來加載,是以英文語言版一直采用Sprite3D來表示Unity中的預設導出項。
Sprite3D選項的導出,相比場景的導出,沒有了光照貼圖的導出,常用于角色或遊戲中活動物品的單獨資源導出,檔案擴充名的是
.lh
,需要用Sprite3D類或它的繼承類加載。
3.3.4 導出配置項說明
導出配置中根據功能分成幾個配置子產品,分别是導出時需要進行配置的一些基礎功能以及VIP功能的配置。下面分别進行說明。
3.3.4.1 節點設定 GameObject Setting
忽略未激活節點
Ignore Not Active Game Objects
導出時,當如上圖一樣,勾選了
Ignore Not Active Game Objects
之後,将不再導出Unity中未激活的節點,下圖是在Unity中未勾選激活的節點對象。
批量導出一級節點
Batch Make The First Level Game Objects
Batch Make The First Level Game Objects
隻有在預設(Sprite3D)配置裡才有這個選項。
不勾選這個功能,會把所有的節點,合并生成一個
.lh
字尾的檔案,
勾選這個功能後,會按一級節點分别生成多個
.lh
字尾的檔案。
3.3.4.2 模型設定 Mesh Setting
Mesh Setting(模型設定)是指模型網格資料的導出設定,功能翻譯過來比較容易了解,分别是:
忽略頂點UV(忽略模型的UV貼圖)
複制
勾選以上的任意選項後,會根據勾選忽略的頂點資料來節省模型資源大小。VIP專屬的模型壓縮功能,可以降低3D模型檔案尺寸約60%。
以上這些功能都起到了減小模型網格檔案(
XX.lm
)尺寸的作用,在目前網速環境下,減少遊戲的加載尺寸,加快玩家進入遊戲的速度,還是多數開發者比較常用的功能。
3.3.4.3 地形設定 Terrain Setting
地形設定是指Unity中的地型導出設定,勾選
Convert Terrain To Mesh
後,如果場景中有地型,會轉換地型為網格。
3.3.4.4 動畫設定 Animation setting
Animation setting(動畫設定)
目前有兩個功能,分别是動畫壓縮
Compress
和預烘焙骨骼動畫
Previously Skeletal Animation
。
動畫壓縮 Compress
Compress
當勾選動畫壓縮
Compress
後,插件導出Animator動畫時會壓縮動畫檔案,會降低3D動畫檔案尺寸約40%。用于加快玩家進入遊戲的速度。
該功能屬于VIP增值功能,需要購買授權才可以使用。
預烘焙骨骼動畫 Pre Baked Bone Animation
Pre Baked Bone Animation
在使用普通的骨骼動畫模式時,骨骼動畫會受到裝置性能的限制,比如在不支援JIT的iOS裝置環境下,每24塊骨骼就需要分mesh來渲染,否則會就出現發黑現象。
是以,插件中提供了
Pre Baked Bone Animation(預烘焙骨骼動畫)
功能,如下圖所示。
預烘培動畫是把預先計算好的動畫檔案烘培到貼圖以及instance動态合批等技術來減少GPU的性能壓力,對比正常的骨骼動畫模式,預烘焙骨骼動畫模式從CPU到GPU性能都有顯著的優化效果,尤其是CPU計算方面更為明顯。由于減少了渲染批次,比如骨骼動畫上,再也不需要通過分mesh來處理了。
盡管預烘焙骨骼動畫模式優勢明顯,但是開發者也需要了解該方案的幾個問題,再決定是否勾選使用。首先是該方案暫時還不支援動畫融合;另外,目前也不支援多個Animator控制多個Mesh的動畫;最後就是GPU顯存的占用會明顯多于原有的骨骼動畫模式。上圖中的
Bake FPS烘焙幀數
就會影響顯存有占用,該值越大,相應的GPU顯存占用也會越大。不過,值越大,動畫資料儲存的也越完整,開發者可根據自己項目的情況去取舍。
另外,在上圖中,
Keep Skeletal Add Point(保留骨骼挂點)
如果勾選後,由于插件會對骨骼進行精簡。是以要想保留必要的動畫資料,需要在導出前确定挂點位置,并在相應的挂點骨骼下添加非空節點,進行占位。
關于預烘焙骨骼動畫模式的使用,與普通的骨骼動畫模式完全相同,注意檔案字尾即可。
3.3.4.5 釋出平台 Assets platform
Assets platform(釋出平台)
是指紋理資源的釋出配置。
預設的情況下,
Conventional
是必須勾選的。這裡不允許取消,其作用是把沒有透明通道需求的
.png
紋理資源自動轉換成為
.jpg
紋理資源。這樣可以避免浪費掉的檔案尺寸。JPG品質(JPG quality)比較容易了解,100為最高品質,75是預設值,開發者可以根據項目需求自行調節。值越大需要加載的檔案體積越大,但品質損失越少。
Android
與
iOS
是指輸出對應系統平台的紋理壓縮格式檔案,Android系統這裡采用的是ETC1壓縮方式,iOS采用的是PVR壓縮方式。在使用時,要判斷不同系統平台來分别加載對應的紋理壓縮資源檔案。如果勾選了這兩個選項,預設的
Conventional
選項可以不用勾選。iOS品質(iOS quality)表示壓縮級别,值越大需要加載的檔案體積越大,但品質損失越少。
紋理壓縮功能,勾選輸出的是
Android
字尾檔案,勾選
.ktx
輸出的是
iOS
字尾檔案。
.pvr
對于一些新手,我們這裡順便普及一下紋理壓縮的作用。
遊戲中常見的紋理圖檔檔案格式通常是PNG和JPG,這種類型的紋理圖檔需要先經過CPU解碼,然後傳送到GPU進行使用。圖檔資源的像素寬高是影響GPU記憶體占用大小的直接因素。而采用了紋理壓縮的格式檔案,無需解碼即可直接被GPU讀取并顯示。是以,一方面是節省了大量的顯示記憶體,另一方面也可以減少圖檔解碼帶來的CPU計算壓力。
經過測試,這裡的紋理壓縮功能,大概會減少顯存約75%,但是可能會增加檔案的體積,是以這也是一種犧牲資源檔案加載體積換取顯存占用減少和CPU對于資源解碼性能消耗的有損壓縮方式。開發者可根據項目需要來選擇使用。
該功能屬于VIP增值功能,需要購買授權才可以使用。
3.3.5 多配置儲存與重置
以上介紹的導出配置項,預設是存到
config 1
中,其實插件一共提供了5個配置清單項,如下圖所示。
通過切換清單項,開發者可以将不同的導出勾選配置,分别存在不同的配置清單項内。當項目資源存在多種導出配置需求時,該功能就比較實用。
配置項右側的
Revert Config(恢複配置)
,點選後會重置目前配置清單項下的導出勾選配置,将其恢複為預設的初始配置。
四、LayaAir引擎插件導出支援清單
除了LayaAir引擎插件自身面闆上的導出設定項,我們還要注意并且必須要了解Unity的功能面闆有哪些是可以導出使用,哪些是不支援的。
因為LayaAir引擎的Unity插件并非是将Unity所有的功能全都支援導出。畢竟我們的LayaAir引擎設計與結構與Unity的引擎并不相同,雖然3D場景基于Unity編輯器進行編輯和導出,但我們需要按LayaAir引擎插件的支援規則來使用。
在本小節,我們就全面介紹LayaAir引擎與插件支援哪些Unity中的功能。如果在本小節支援清單中未提及的,都是目前不支援的。是以,如果是剛接觸Unity的開發者,在學習Unity工具使用的時候,也不必要全部學習,可以把本小節中所涉及的支援内容,作為關鍵字搜尋學習即可。
LayaAir引擎插件也會不斷在更新,當更新新的引擎版本後,可以關注版本更新日志以及該文檔的變化。
4.1 Inspector面闆的基礎屬性
在Unity的Inspector面闆中,可以檢視和編輯Unity編輯器中幾乎所有内容,下面我們先了解一下Inspector面闆的基礎通用屬性。
在上圖的基礎屬性裡,LayaAir導出支援情況如下:
Unity的Inspector基礎屬性 | LayaAir是否支援導出的說明 |
---|---|
GameObject Name(節點名稱) | 支援 |
Static(靜态) | 隻支援勾選 或 不勾選 |
Layer(層) | 隻支援層的序号導出,開發者也可以在LayaAir引擎中設定Layer |
Position(位置) | 支援(包括:X、Y、Z) |
Rotation(旋轉) | 支援(包括:X、Y、Z) |
Scale(縮放) | 支援(包括:X、Y、Z) |
對比上面的圖和表格,我們看到是不支援的。
Tag
與
Static
是部分支援。後續将不再提醒,關注表格中的支援狀态即可。
Layer
這裡特别說一下,靜态Static勾選後是全選,也就是Everything,如下圖所示。但實際上LayaAir引擎隻支援了Lightmap Static和Batching Static,那開發者不選Everything,隻勾選這兩個行不行。當然是不行的,我們其實隻認Static勾選或不勾選這個狀态,如果此處單獨選擇,導出并沒有效果。
4.2 相機的屬性
在上圖中的Unity相機屬性裡,LayaAir導出支援情況如下:
Unity的相機屬性 | LayaAir是否支援導出的說明 |
---|---|
Clear Flags(清除标志) | 支援 (包括:Skybox天空盒、Solid Color純色、Depth only僅深度、Don’t Clear不清除) |
Background(背景) | 支援 |
Projection(投射方式) | 支援(包括:Perspective透視(Field of View),Orthographic正交(size)) |
Clipping Planes(剪裁平面) | 支援(包括:Near近點、Far遠點) |
Viewport Rect(标準視圖矩形) | 支援(包括:X、Y、W、H) |
Allow HDR(允許渲染高動态色彩畫面) | 支援 |
4.3 燈光的屬性
在上圖中的Unity燈光屬性裡,LayaAir導出支援情況如下:
Unity的燈光屬性 | LayaAir是否支援導出的說明 |
---|---|
Type(燈光類型) | 部分支援(包括:Spot聚光(Range照射範圍、Spot Angle聚光燈錐形角度)、Directional平行光、Point點光(Range照射範圍)) |
Color(燈光顔色) | 支援 |
Mode(燈光模式) | 部分支援(包括:Realtime實時燈光、Baked烘焙光照貼圖) |
Intensity(燈光強度) | 支援 |
燈光的陰影不支援從Unity中導出使用,但是LayaAir引擎中有燈光陰影的API,具體陰影的使用,可以查閱LayaAir引擎相應的官方文檔與API。
4.4 模型相關的屬性
關于模型的屬性,分别支援普通模型和骨骼模型。
4.4.1 普通模型
普通模型需要Mesh Filter元件Mesh Render元件,下面分别進行介紹。
Mesh Filter 網格過濾器
在上圖中的Unity網格過濾器屬性裡,LayaAir導出支援情況如下:
Unity的蒙皮網格渲染屬性 | LayaAir是否支援導出的說明 |
---|---|
Mesh(網格) | 支援 |
Mesh Renderer 網格渲染器
在上圖中Unity的Mesh Render元件屬性裡,LayaAir導出支援情況如下:
Unity的網格渲染屬性 | LayaAir是否支援導出的說明 |
---|---|
Materials(材質) | 支援(包括:Size大小、Element材質球元素) |
Lightmap Static( 靜态光照貼圖) | 部分支援(包括:Lightmaps貼圖(Baked Lightmap烘焙光照貼圖(Lightmap Index、Tiling X、Tiling Y、Offset X、Offset Y))) |
對于新手,需要提醒的是,勾選這裡的,需要先勾選之前介紹的基礎屬性
Lightmap Static
,同時還要将場景環境光的配置裡的Amblent Mode(環境光照明模式)設定為Baked(烘焙),然後Generate Lighting獲得烘焙光照貼圖。
Static
4.4.2 骨骼模型
骨骼模型的Mesh與Mesh Renderer不再分開,合并在元件
Skinned Mesh Renderer
裡,如下圖所示:
在上圖中Unity的Skinned Mesh Renderer元件屬性裡,LayaAir導出支援情況如下:
Unity的蒙皮網格渲染屬性 | LayaAir是否支援導出的說明 |
---|---|
Mesh(網格) | 支援 |
Root Bone(骨骼根節點) | 支援 |
Bounds(包圍盒) | 支援(包括:Center中心(X、Y、Z)、Extent範圍(X、Y、Z)) |
Materials(材質) | 支援(包括:Size大小、Element材質球元素) |
4.4.3 材質
對于模型的材質,之前的小節中有提到過,必須要使用LayaAir引擎提供的材質,而且提供了兩個一鍵切換Unity材質為LayaAir材質的快捷功能。這裡我們介紹一下,如何在Unity界面中去手動切換LayaAir材質。
當在
Assets(資源)
面闆中選中mat字尾的材質球後,Inspector面闆中,
Shader
選項欄那裡如果不是LayaAir3D的材質或者想改變材質,需要點開選項欄,在LayaAir3D裡找到對應的材質然後點選切換。比如上圖的箭頭示意中,是将mesh(模型網格)材質BlinnPhon切換為為
Unlit(不受光)
材質。
除了LayaAir3D裡提供的材質Shader外,Unity裡的所有材質,都不能在LayaAir引擎中使用。
并且材質的分類都要對應起來,比如粒子材質就要使用粒子分類下的shurikenParticle,錯用了Mesh的材質shader,導出的時候不會報錯,實際運作是錯的。
4.5 紋理的屬性
在
Assets(資源)
面闆裡,找到2D圖檔資源,可以為其設定紋理的屬性。如下圖所示。
在上圖中的Unity紋理屬性裡,LayaAir導出支援情況如下:
Unity的紋理屬性 | LayaAir是否支援導出的說明 |
---|---|
Generate Mip Maps(生成Mipmap) | 部分支援(僅支援是否勾選的狀态) |
Wrap Mode(循環模式) | 部分支援(包括:Repeat重複、Clamp強制拉伸) |
Filter Mode(過濾模式) | 支援(包括:Point點過濾、Bilinear雙線性過濾、Trilinear三線性過濾) |
Aniso Level(各向異性等級) | 支援 |
4.6 動畫的屬性
在動畫方面,LayaAir支援
Animator
元件和關聯的
Animator Controller
面闆的部分屬性導出和使用。
Aniamtor元件
在上圖中的Unity動畫屬性裡,LayaAir導出支援情況如下:
Unity的動畫屬性 | LayaAir是否支援導出的說明 |
---|---|
Controller(動畫控制器) | 支援 |
Culling Mode( 剔除模式) | 部分支援(包括:Always Animate 總是播放、Cull Completely完全剔除) |
Animator Controller State
在Aniamtor元件屬性中輕按兩下Controller打開動畫控制器的面闆,選中
State
(狀态),可以看到下圖面闆。
在上圖中的Unity動畫控制器State屬性裡,LayaAir導出支援情況如下:
Unity的動畫控制器State屬性 | LayaAir是否支援導出的說明 |
---|---|
Motion(標明動畫) | 支援 |
Speed(動畫播放速度) | 支援 |
4.7 拖尾的屬性
在上圖中的Unity拖尾屬性裡,LayaAir導出支援情況如下:
Unity的拖尾屬性 | LayaAir是否支援導出的說明 |
---|---|
Materials(材質) | 支援(包括:Size大小、Element材質球元素) |
Time(拖尾效果持續時間) | 支援 |
min Vertex Distance(最小頂點距離) | 支援 |
Width(拖尾寬度) | 支援 |
Color(拖尾漸變顔色) | 部分支援(包括:Mode模式(Blend漸變色、Fixed固定色)、Color顔色值、Alpha透明度、Location顔色位置) |
Alignment(對齊) | 支援(包括:View朝向相機、Transform Z朝向自身局部坐标Z) |
Texture Mode(紋理模式) | 部分支援(包括:Stretch拉伸) |
4.8 地形的屬性
關于地形,我們正在豐富,近期會完善。目前僅支援部分Terrain元件屬性(支援地表,不支援植被),導出時會轉換為靜态模型Mesh。
目前地形僅支援上圖中Terrain元件的Mesh Resolution屬性導出,具體在LayaAir中的支援情況如下:
Unity的Terrain元件Mesh Resolution屬性 | LayaAir是否支援導出的說明 |
---|---|
Terrain Width(地形寬) | 支援 |
Terrain Length(地形長) | 支援 |
Terrain Height(地形高) | 支援 |
Detail Resolution(細節分辨率) | 支援 |
需要重點說明的地形材質
地形的材質不支援LayaAir引擎目前自帶的材質Shader,導出的地形的靜态網格(模型Mesh)後,開發者需要通過LayaAir的接口自定義材質shader來為地形網格添加材質。
4.9 實體相關的屬性
在3D實體方面,目前支援剛體Rigidbody元件、盒形碰撞體Box Collider元件、球形碰撞體Sphere Collider元件、膠囊碰撞體Capsule Collider元件、網格碰撞體Mesh Collider元件、固定關節Fixed Joint元件、可配置關節Configurable Joint元件。下面我們分别進行介紹。
4.9.1 剛體元件 Rigidbody
在上圖中的Unity剛體屬性裡,LayaAir導出支援情況如下:
Unity的剛體屬性 | LayaAir是否支援導出的說明 |
---|---|
Mass(品質) | 支援 |
Use Gravity(使用重力) | 支援 |
Is Kinematic(是運動學剛體) | 支援 |
Constraints(限制) | 支援(包括:Freeze Position當機位置(X、Y、Z)、Freeze Rotation當機旋轉(X、Y、Z)) |
4.9.2 盒形碰撞體元件Box Collider
在上圖中的Unity盒形碰撞體屬性裡,LayaAir導出支援情況如下:
Unity的盒形碰撞體屬性 | LayaAir是否支援導出的說明 |
---|---|
Is Trigger(是觸發器) | 支援 |
Center(中心點位置) | 支援(包括:X、Y、Z) |
Size(大小) | 支援(包括:X、Y、Z) |
4.9.3 球形碰撞體元件Sphere Collider
在上圖中的Unity球形碰撞體屬性裡,LayaAir導出支援情況如下:
Unity的球形碰撞體屬性 | LayaAir是否支援導出的說明 |
---|---|
Is Trigger(是觸發器) | 支援 |
Center(中心點位置) | 支援(包括:X、Y、Z) |
Radius(半徑) | 支援 |
4.9.4 膠囊碰撞體元件Capsule Collider
在上圖中的Unity膠囊碰撞體屬性裡,LayaAir導出支援情況如下:
Unity的膠囊碰撞體屬性 | LayaAir是否支援導出的說明 |
---|---|
Is Trigger(是觸發器) | 支援 |
Center(中心點位置) | 支援(包括:X、Y、Z) |
Radius(半徑) | 支援 |
Height(高度) | 支援 |
Direction(高度的方向) | 支援(包括:X-Axis、Y-Axis、Z-Axis) |
4.9.5 網格碰撞體元件Mesh Collider
在上圖中的Unity網格碰撞體屬性裡,LayaAir導出支援情況如下:
Unity的網格碰撞體屬性 | LayaAir是否支援導出的說明 |
---|---|
Is Trigger(是觸發器) | 支援 |
Mesh(網格) | 支援 |
4.9.6 固定關節元件Fixed Joint
在上圖中的Unity固定關節屬性裡,LayaAir導出支援情況如下:
Unity的固定關節屬性 | LayaAir是否支援導出的說明 |
---|---|
Connected Body(連接配接的剛體) | 支援 |
Break Force(斷開力) | 支援 |
Break Torque(斷開扭矩) | 支援 |
4.9.7 可配置關節元件Configurable Joint
在上圖中的Unity可配置關節屬性裡,LayaAir導出支援情況如下:
Unity的可配置關節屬性 | LayaAir是否支援導出的說明 |
---|---|
Connected Body(連接配接的剛體) | 支援 |
Anchor(錨點) | 支援(包括:X、Y、Z) |
Axis(主軸) | 支援(包括:X、Y、Z) |
Connected Anchor(連接配接錨點) | 支援(包括:X、Y、Z) |
Secondary Axis(副軸) | 支援(包括:X、Y、Z) |
X Motion(沿X軸平移運動) | 支援(包括:Locked鎖定、Limited受限、Free自由) |
Y Motion(沿Y軸平移運動) | 支援(包括:Locked鎖定、Limited受限、Free自由) |
Z Motion(沿Z軸平移運動) | 支援(包括:Locked鎖定、Limited受限、Free自由) |
Angular X Motion(繞 X 軸旋轉的角運動) | 支援(包括:Locked鎖定、Limited受限、Free自由) |
Angular Y Motion(繞 Y 軸旋轉的角運動) | 支援(包括:Locked鎖定、Limited受限、Free自由) |
Angular Z Motion(繞 Z 軸旋轉的角運動) | 支援(包括:Locked鎖定、Limited受限、Free自由) |
Linear Limit Spring(彈簧線性限制) | 支援(包括:Spring彈簧、Damper阻尼) |
Linear Limit(線性限制) | 部分支援(包括:Limit限制、Bounciness彈力) |
Angular X Limit Spring(彈簧X軸旋轉限制) | 支援(包括:Spring彈簧、Damper阻尼) |
Low Angular X Limit(X軸旋轉的下限) | 部分支援(包括:Limit限制、Bounciness彈力) |
Hight Angular X Limit(X軸旋轉的上限) | 部分支援(包括:Limit限制、Bounciness彈力) |
Angular YZ Limit Spring(彈簧Y軸和Z軸旋轉限制) | 支援(包括:Spring彈簧、Damper阻尼) |
Angular Y Limit(Y軸旋轉的限制) | 部分支援(包括:Limit限制、Bounciness彈力) |
Angular Z Limit(Z軸旋轉的限制) | 部分支援(包括:Limit限制、Bounciness彈力) |
Target Position(目标角度) | 支援(包括:X、Y、Z) |
Target Velocity(目标速度) | 支援(包括:X、Y、Z) |
Break Force(斷開力) | 支援 |
Break Torque(斷開扭矩) | 支援 |
4.10 粒子系統的屬性
粒子系統的屬性比較多,我們在這個小節,分成主子產品、Emission子產品、Shape子產品、Velocity over Lifetime子產品、Color over Lifetime子產品、Size over Lifetime子產品、Texture Sheet Animation子產品、Render子產品分别進行介紹。
4.10.1 粒子系統主子產品
在上圖中的Unity粒子系統主子產品屬性裡,LayaAir導出支援情況如下:
Unity的粒子系統主子產品屬性 | LayaAir是否支援導出的說明 |
---|---|
Duration(粒子持續時間) | 支援 |
Looping(是否循環播放) | 支援 |
Start Delay(延遲多久開始) | 支援(包括:Constant固定值、Random between Two Constant随機在兩個常量之間) |
Start Lifetime(生命周期) | 部分支援(包括:Constant 固定值、Random between Two Constants随機在兩個常量之間) |
Start Speed(初始速度) | 部分支援(包括:Constant 固定值、Random between Two Constants随機在兩個常量之間) |
3D Start Size(3D初始大小) | 部分支援(包括:X、Y、Z、Constant 固定值、Random between Two Constants随機在兩個常量之間) |
Start Size(初始大小) | 部分支援(包括:Constant 固定值、Random between Two Constants随機在兩個常量之間) |
3D Start Rotation(3D初始旋轉方向) | 部分支援(包括:X、Y、Z、Constant 固定值、Random between Two Constants随機在兩個常量之間) |
Start Rotation(初始旋轉方向) | 部分支援(包括:Constant 固定值) |
Flip Rotation(随機翻轉的機率) | 支援【特别說明:這裡和Unity效果不同,LayaAir中是指随機翻轉的機率,随機種子是0和1,0不翻轉,1翻轉】 |
Start Color(開始顔色) | 部分支援(包括:Color固定顔色、Random between Two Colors随機在兩個顔色之間) |
Gravity Modifier(重力修正) | 部分支援(包括:Constant 固定值) |
Simulation Space(模拟空間) | 部分支援(包括:Local本地、World世界) |
Scaling Model(縮放模式) | 部分支援(包括:Hierarchy受節點層級關系的縮放影響、Local僅受自身縮放影響) |
Play On Awake(喚醒時播放) | 支援 |
Max Particls(最大粒子數量) | 支援 |
Auto Random Seed(自動随機種子) | 支援 |
4.10.2 發射 Emission
在上圖中的Unity粒子發射屬性裡,LayaAir導出支援情況如下:
Unity的粒子發射屬性 | LayaAir是否支援導出的說明 |
---|---|
Rate Over Time(發射速率 [個/秒]) | 部分支援(包括:Constant 固定值、Random between Two Constants随機在兩個常量之間) |
Bursts(粒子爆裂) | 部分支援(Time時間、Count數量(Constant 固定值、Random between Two Constants随機在兩個常量之間)) |
4.10.3 發射的形狀 Shape
關于
Shape形狀
目前支援Sphere、Hemisphere、Cone、Box、Circle,由于選項的不同,會導緻屬性的不同,我們分别截圖說明。
球體、半球 (Sphere、Hemisphere)
在上圖Unity粒子形狀的球體與半球屬性裡,LayaAir導出支援情況如下:
部分支援(包括:Sphere球體、Hemisphere半球、Cone錐體、Box盒子、Circle圓形)
複制
錐體 Cone
在上圖Unity粒子形狀的球體與半球屬性裡,LayaAir導出支援情況如下:
部分支援(包括:Sphere球體、Hemisphere半球、Cone錐體、Box盒子、Circle圓形)
複制
盒子Box
在上圖Unity粒子形狀的盒子屬性裡,LayaAir導出支援情況如下:
Unity粒子形狀的盒子屬性 | LayaAir是否支援導出的說明 |
---|---|
Shape(粒子發射形狀) | 部分支援(包括:Sphere球體、Hemisphere半球、Cone錐體、Box盒子、Circle圓形) |
Emit form:(發射自:) | 部分支援(包括:Volume内部随機點發射) |
Scale(改變發射器形狀的大小) | 支援(X、Y、Z) |
Randomize Direction(是否随機方向) | 支援 |
圓形Circle
在上圖Unity粒子形狀的圓形屬性裡,LayaAir導出支援情況如下:
部分支援(包括:Sphere球體、Hemisphere半球、Cone錐體、Box盒子、Circle圓形)
複制
4.10.4 生命周期内的速度 Velocity over Lifetime
在上圖Unity粒子生命周期内的速度屬性裡,LayaAir導出支援情況如下:
Unity粒子生命周期内的速度屬性 | LayaAir是否支援導出的說明 |
---|---|
linear(線性運動速度) | 支援(X、Y、Z、Constant固定值、Curve 曲線、Random between Two Constants随機在兩個常量之間、Random between Two Curves随機在兩個曲線之間) |
Space(速度空間) | 支援(Local本地、World世界) |
4.10.5 生命周期内的顔色與大小 Color over Lifetime、Size over Lifetime
在上圖中的Unity生命周期内的顔色與大小屬性裡,LayaAir導出支援情況如下:
Unity的生命周期内的顔色與大小屬性 | LayaAir是否支援導出的說明 |
---|---|
Color(生命周期顔色 ) | 支援(包括:Gradient漸變色、Random form Two Gradients随機在兩個漸變色之間) |
Separate Axes(分離軸) | 支援 |
Size(大小) | 支援(包括:Curve曲線、Random between Two Constants随機在兩個常量之間、Random between Two Curves随機在兩個曲線之間)【注:預設是Size,勾選Separate Axes後Size項變為XYZ】 |
4.10.6 紋理動畫 Texture Sheet Animation
在上圖中的Unity粒子紋理動畫屬性裡,LayaAir導出支援情況如下:
Unity的粒子紋理動畫屬性 | LayaAir是否支援導出的說明 |
---|---|
Tiles(紋理平鋪 ) | 支援(包括:X、Y) |
Animation(動畫類型) | 支援(包括:Whole Sheet整層、Single Row單行) |
Random Row(随機行) | 支援【注:選中單行類型才有此選項】 |
Frame over Time(時間幀) | 支援(包括:Constant常量、Curve曲線、Random between Two Constant随機在兩個常量之間、Random between Two Curves随機兩個曲線之間) |
Start Frame(開始幀) | 支援(包括:Constant常量、Random betweem Two Constants随機在兩個常量之間) |
Cycles(循環次數) | 支援 |
Affected UV Channels(受影響的UV通道) | 部分支援(包括:Everything)【注:此處Everything隻代表一種預設值狀态,不代表UV0-3的選項勾選】 |
4.10.7 粒子渲染器 Renderer
在上圖中的Unity粒子渲染器屬性裡,LayaAir導出支援情況如下:
Unity的粒子渲染器屬性 | LayaAir是否支援導出的說明 |
---|---|
Render Mode(渲染模式) | 部分支援(包括:Billboard廣告牌、Stretched Billboard拉伸廣告牌(Speed Scale速度縮放、Length Scale長度縮放)、Horizontal Billboard水準廣告牌、Vertical Billboard垂直廣告牌、Mesh網格) |
Sorting Fudge(排序校正) | 支援 |
4.11 場景渲染配置的屬性
在3D場景的渲染配置裡,目前支援導出的主要是環境相關的(例如,環境光照,環境反射等)以及場景霧效等。下面我們分别進行介紹。
4.11.1 環境相關配置 Environment
在上圖中的Unity環境相關配置屬性裡,LayaAir導出支援情況如下:
Unity的環境相關配置屬性 | LayaAir是否支援導出的說明 |
---|---|
Skybox Material(天空盒材質) | 支援 |
Sun Source(太陽光照來源) | 支援 |
Environment Lighting(環境光照) | 部分支援(包括:Source環境光來源(Skybox天空盒、Color單色)、Ambient Color環境光顔色值、Ambient Mode環境光照明模式(Realtime實時光、Baked烘焙到光照貼圖)) |
Environment Reflections(環境反射) | 部分支援(包括:Source環境反射來源(Skybox天空盒、Custom自定義)、Resolution環境反射貼圖分辨率、Intensity Multiplier環境反射強度強化) |
自定義的立方體紋理需要重點說明一下,當我們建立的新Cubemap,除了六張紋理外,隻支援Face Size與 Readable這兩個屬性的設定與生效。
4.11.2 場景霧效 Fog
在上圖中的Unity場景霧效屬性裡,LayaAir導出支援情況如下:
Unity的環境相關配置屬性 | LayaAir是否支援導出的說明 |
---|---|
Color(霧效顔色) | 支援 |
Mode(霧效衰減模式) | 部分支援(包括:Linear線性模式) |
Start(開始) | 支援 |
End(結束) | 支援 |
特别提醒:
如果用到了不在以上導出清單中的功能,可能會引起報錯,或者效果無效,可以通過檢視導出的報錯資訊,對照以上的功能清單進行修改。
以上清單僅代表着可以在Unity中進行編輯設定和導出使用的功能屬性,并不代表引擎的全部功能,更多引擎的能力可以通過檢視官網的文檔和引擎API進行使用。
五、模型的導出檔案與加載顯示
當了解完插件的功能和使用規則後,我們就可以在Unity中進行編輯并導出了,但是導出後的檔案名分别代表着什麼,又是怎麼進行加載使用的。本小節開始為大家介紹。
5.1 導出檔案類型的說明
場景檔案,選擇導出
場景Scene3D
類别時生成的檔案類型。會導出完整的場景資訊,其中包含了場景需要的各種資料、光照貼圖、模型、位置等。是以,需要導出場景相關的設定時,必須要使用Scene3D類别導出,就可以看到
.ls
字尾的檔案。
複制
5.2 加載顯示
導出的Unity資源,在不考慮其它邏輯的情況下,要通過LayaAir引擎顯示出來,就需要先加載資源再顯示了。
下面我們就分别就常用的導出加載進行介紹。
5.2.1 場景加載與使用 (.ls)
加載場景,也就是加載
.ls
字尾的場景檔案,我們需要通過
Scene3D.load()
方法去加載場景檔案,然後整個導出的場景中相關模型、環境等檔案也會自動加載進來。無需逐個進行加載。
場景加載的示例代碼如下:
//3d場景加載
Laya.Scene3D.load("xx/xx.ls",Laya.Handler.create(null,function(scene){
//加載完成後,把加載回調中傳回的完整場景scene添加到舞台
Laya.stage.addChild(scene);
//擷取錄影機
var camera = scene.getChildByName("Main Camera");
/**
** 省略其它代碼若幹,可前往Layabox官網示例或相關文檔中檢視
*/
}));
複制
5.2.2 預設的加載與使用(.lh)
有一些模型或者動畫,不想一開始就顯示在場景中,這時候,通常會通過預設的方式導出,再依據遊戲邏輯動态添加到舞台上。對于單個預設的加載,也就是
.lh
字尾的預設檔案加載,我們需要使用
Sprite3D.load()
方法。
預設加載的示例代碼如下:
//加載3D預設(3D精靈)
Laya.Sprite3D.load("xx/xx.lh",Laya.Handler.create(null,function(sp){
//加載完成後,把加載回調中傳回的預設sp添加到Scene場景的子節點
var layaMonkey = scene.addChild(sp);
/**
** 省略其它代碼若幹,可前往Layabox官網示例或相關文檔中檢視
*/
}));
複制
5.2.3 批量預加載
雖然加載
.ls
場景後會自動把其它相關的都加載好,或者我們可以按需動态加載預設等資源。但是,如果這些資源不大還好,如果比較大,并且數量多,那進入場景或者打開資源,就會需要加載等待。
通常開發者會把比較大的資源在進入遊戲之前,就批量預加載,通過進度條讓開發者對加載有一個統一的感覺,然後在遊戲過程中暢快的體驗遊戲本身玩法,避免因加載問題打斷遊戲本身的體驗。
在加載2D資源的時候,通常使用
Laya.loader.load()
方法預加載,而預加載3D資源必須要用
Laya.loader.create()
方法。在加載完成後,可以直接使用
Laya.loader.getRes()
這個方法來擷取加載完成的資源。
批量預加載的示例代碼如下:
var resource:Array<any>=[
"xx.ls",
"xx/xx.lh",
"xx/xx.lmat",
"xx/xx.png",
"xx/xx.lm",
"xx/xx.ltc",
"xx/xx.lani",
];
//批量預加載
Laya.loader.create(resource,Laya.Handler.create(this,this.onLoaded));
onLoaded():void{
//加載完成後的處理邏輯……
}
複制
使用預加載資源的示例代碼如下:
//擷取預加載的3D場景資源對象
var_Scene3D:Laya.Scene3D=Laya.Loader.getRes("xx.ls");
//把場景添加到舞台
Laya.stage.addChild(_Scene3D);
/**
** 省略其它代碼若幹,可前往Layabox官網示例或相關文檔中檢視
*/
//擷取預加載的3D預設資源對象
var sp:Laya.Sprite3D=Laya.Loader.getRes("xx/xx.lh");
//添加預設對象到_Scene3D場景的子節點
var layaMonkey2 =_Scene3D.addChild(sp);
layaMonkey2.transform.localScale =newLaya.Vector3(4,4,4);
layaMonkey2.transform.translate(newLaya.Vector3(-20,13,0));
//擷取動畫元件
var xxAni = layaMonkey2.getChildAt(0).getComponent(Laya.Animator);
//擷取動畫資源對象
var xxClip =Laya.Loader.getRes("xx/xx.lani");
//建立動作狀态
var state1 =newLaya.AnimatorState();
//動作名稱
state1.name ="hello";
//動作播放起始時間
state1.clipStart =0/581;
//動作播放結束時間
state1.clipEnd =581/581;
//設定動作
state1.clip = xxClip;
//設定動作循環
state1.clip.islooping =true;
//為動畫元件添加一個動作狀态
xxAni.getControllerLayer(0).addState(state1);
//播放動作
xxAni.play("hello");
/**
** 省略其它代碼若幹,可前往Layabox官網示例或相關文檔中檢視
*/
複制
5.2.4 不常用的3D資源加載
通常,預加載,場景加載,預設加載,可以滿足日常加載使用需求。當然,開發者也可能需要動态加載替換網格、材質、紋理等需求,最後再簡單介紹一下這些不常用的3D資源加載。
網格Mesh加載
單個網格加載使用
Mesh.load()
方法,示例代碼如下:
//加載Mesh
Laya.Mesh.load("xx/xx.lm",Laya.Handler.create(null,function(mesh){
var layaMonkey = scene.addChild(newLaya.MeshSprite3D(mesh));
/**
** 省略其它代碼若幹,可前往Layabox官網示例或相關文檔中檢視
*/
}));
複制
材質Material加載
單個材質加載使用
BaseMaterial.load()
方法,示例代碼如下:
//加載材質,省略若幹代碼,僅為加載示例
Laya.BaseMaterial.load("xx/xx.lmat",Laya.Handler.create(null,function(mat){
//擷取相機的天空渲染器
var skyRenderer:Laya.SkyRenderer= camera.skyRenderer;
//建立天空盒的mesh
skyRenderer.mesh =Laya.SkyBox.instance;
//設定天空盒材質
skyRenderer.material = mat;
}));
複制
紋理Texture加載
單個紋理加載使用
Texture2D.load()
方法,示例代碼如下:
//加載紋理,省略若幹代碼,僅為加載示例
Laya.Texture2D.load("xx/xx.png",Laya.Handler.create(null,function(Texture){
//使用紋理
var earth1 = scene.addChild(newLaya.MeshSprite3D(PrimitiveMesh.createSphere(5,32,32)));
earth1.transform.translate(newLaya.Vector3(10,20,-8));
var earthMat =newLaya.BlinnPhongMaterial();
earthMat.albedoTexture =Texture;
earthMat.albedoIntensity =1;
earth1.meshRenderer.material = earthMat;
}));
複制
寫在最後
各位看官,如果覺得寫的還可以,歡迎點贊和轉發分享,下一篇技術文章還在醞釀中,有想看哪些方面的,也可以留言。
END