在這篇文章中,咱們選擇了過去幾周Unity官方社區交流羣以及UUG社區羣中比較有表明性的幾個問題,總結在這裏和你們進行分享。主要涵蓋了Scriptable Build Pipeline、Standard Assets、Scripting、Graphics、VS/VS Code等領域,其中會着重介紹一下Scriptable Build Pipeline以及使用Scriptable Build Pipeline流水線來打包Assetbundle的相關話題。html
Q:我安裝了最新的2018.2.1f1,不過在Package Manager裏沒找到Scriptable Build Pipeline,請問是須要什麼設置嗎?git
A:有不少朋友都十分關注Unity2018中的Scriptable Render Pipeline,可能你們更喜歡做外貌協會的成員吧。其實除了關注度很高的Scriptable Render Pipeline,Unity2018.2版本中還推出了另外一個Scriptable的Pipeline,即Scriptable Build Pipeline。
github
可是很多朋友可能會發現一個問題,即在Unity 2018.2的Editor中找不到Scriptable Build Pipeline的模塊,甚至在Package Manager中也沒有發現Scriptable Build Pipeline的package。
編程
其實安裝Scriptable Build Pipeline十分簡單,咱們只需修改工程目錄下的Packages/manifest.json文件便可,在 「dependencies」這項添加對SBP的依賴。json
{ "dependencies": { "com.unity.scriptablebuildpipeline": "0.2.0-preview" } }
這樣,咱們就能將SBP安裝到咱們的工程中了。
api
接下來,咱們就能夠調用SBP的API來構建你們都很熟悉的Assetbundle了。
新的構建接口叫作ContentPipeline.BuildAssetBundles,它定義在UnityEditor.Build.Pipeline這個命名空間下。它的函數簽名如圖:
能夠看到,所需的參數爲BuildParameters、BundleBuildContent以及BundleBuildResults,而且會返回一個ReturnCode,供咱們查看構建的狀態,例如Success、Error、Canceled等等。
其中BuildParameters主要提供了一些構建參數,好比構建的目標平臺、輸出路徑、壓縮格式等等。BundleBuildContent則是供SBP來使用被構建爲Assetbundle的Asset列表。BundleBuildResults則保存了腳本編譯以及AssetBundle構建的一些比較詳細的結果。數組
與之對應,SBP仍然保留了傳統的Build Pipeline,在這裏它的名字叫作LegacyBuildPipeline.BuildAssetBundles,用法和以前的構建腳本同樣。函數
因此,咱們就能夠寫一個簡單的腳原本分別使用兩者構建一個Assetbundle,並在運行時進行加載。
測試
咱們能夠發現一個頗有趣的結果,那就是使用SBP構建的Asetbundle與傳統的構建方式相比,是不生成mainfest文件的。
優化
除此以外,另一個很大的不一樣在於,若是咱們要使用傳統的AssetBundle加載接口來加載AssetBundle資源的話,使用SBP構建的AssetBundle在loadasset時要傳入該Asset的完整路徑,而不能只是該Asset名字。
固然傳入完整的路徑來加載Asset稍顯複雜,而且咱們也想要可以在腳本中直接指定須要打包的Asset,這時咱們就能夠利用AssetBundleBuild來定義AB包的數據了。而且利用AssetBundleBuild數組來建立一個BundleBuildContent實例。
其中AssetBundleBuild的assetNames字段中指明的Asset會被構建到這個bundle中。
除此以外,addressableNames字段的值能夠代替以前完整的Asset路徑來加載對應的Asset,不過我在0.2.0 Preview版本上進行測試時這個字段還有一些bug,向開發反饋以後也很快被修復了,以後的版本中應該能夠正常執行相關的操做了。
若是不使用傳統的資源加載API來加載資源呢?據說過Scriptable Build Pipeline的朋友,也必定或多或少的聽過Addressable Asset System。Addressable Asset System其實也在Unity 2018.2發佈了,咱們採用和Scriptable Build Pipeline相似的方式來激活它吧。
一樣咱們要來修改一下 Packages/manifest.json文件,將Addressable Asset System添加到依賴項中。
"dependencies": { "com.unity.addressables": "0.2.2-preview", }
這樣咱們就能夠在工程中使用Addressable資源系統了。
可是須要注意的是,目前SBP和Addressable資源系統都還處於preview階段,也就是說仍然會有大量的修改和變化。
上面的小例子能夠在這裏獲取:
https://github.com/chenjd/SBP_AssetBundles_Demo
SBP的文檔能夠點擊下面的連接來查看:
https://docs.unity3d.com/Packages/com.unity.scriptablebuildpipeline@0.0/api/index.html
Addressable資源系統的文檔能夠點擊下面來查看:
https://docs.unity3d.com/Packages/com.unity.addressables@0.2/manual/index.html
Q:Unity2018.2 安裝包中沒有standard asset 選項。若是想要安裝standard asset須要經過什麼途徑?
A:在Unity2018.2版本中,經過Unity安裝程序或Unity Hub來安裝Unity時,能夠發現standard asset選項消失了。
這是由於這套standard asset的版本比較老舊,能夠追溯到Unity5.0的版本。所以Unity的新版本會逐漸更換現有的standard asset資源。
當前能夠選擇去Asset Store上下載老版本的Standard Asset,也能夠考慮使用Unity新的2D、3D Game Kit,或者是Unity Learn上的其餘示例工程。
Q:我如今想實現用Attribute對修飾的字段進行依賴注入來建立實例,因此我但願這個Attribute可以獲取獲得它所修飾的字段的類型。
而後在Attribute構建實例的時候,順便把它所修飾的類型也新建一個返回出去,賦值給它所修飾的這個字段,請問如何實現?
A:你要作的其實就是自定義個Attribute而後根據它修飾的對象類型用它來初始化對象。你能夠參考一下這篇文章:https://answers.unity.com/questions/896763/custom-attributes.html
(深圳-Starsky)
Q1:Hi,你們好!諮詢一個問題,有使用U3D2018.2 GPU instance 的嗎?我測試了一下勾選shader的GPU實例化,發現即便在同一燈光貼圖,若是渲染隊列排序中,中間還隔着另一個對象話,也會致使拆分紅多個批次。可是用靜態批處理就不會有這種現象,若是場景排放的物體交錯程度很高,GPU實例化效果就不理想,大家對這種狀況有別的處理方案嗎?
A:有可能,你能夠查看frame debugger,若是沒有合併成功的話,會有沒有合併在一塊兒的緣由。好比使用GPU Instance可是是不一樣的mesh或submesh,就會失敗。
使用GPU Instance的並很多。並且2018.1增長了GPU Instance對GI的支持。可是GPU instancing對硬件要求較高,所以對於場景中廣泛出現的靜態物體建議使用static batch能夠兼顧到低端設備,對於大量在高端機上出現的物體,例如大量的草,樹木,這類物體可使用GPU Instance,在低端機上能夠進行剔除優化,或者不顯示。
Q2:問一下大佬們Unity可不可使用球面諧波係數產生高光效果?
A1:思路錯了,SH通常用來提供低頻的光照信息,不是用來作高光的。
A2:SH達不到高光細節的頻率,你本身寫shader硬要這麼作能夠,可是高光會變化的很是『平緩』。(北京-人醜就要多讀書)
A3:達不到。Unity的SH就三階最高了。爲何不用反射球?(上海-CGBull )
Q1:你們好,我在Unity中使用vs code可爲何不提示呢?並且也不報錯。
這裏沒法引用到UI。
A:你打開的應該是單獨的一個cs文件,而不是整個project。若是正常加載的話,是沒有問題的。
你能夠參考一下這個文檔:https://code.visualstudio.com/docs/other/unity
Q2:又沒人遇到過unity5.6.0f3 在vs裏面修改代碼後在editor裏面看任然是沒有改動的狀況?
兩邊代碼不一致的狀況如上面的截圖所示。
A:這種問題一般是因爲你沒有勾選Unity Preference中的Auto Refresh選項。這個選項在Unity Preference/General中。
勾選上便可。
好了,以上就是想和你們分享的幾個在羣裏討論的小問題。
再次,歡迎你們加入咱們這個討論乾貨的官方技術羣,交流分享呀。
Unity官方社區交流羣:629212643
-EOF-
最後打個廣告,歡迎支持個人書
Unity 3D腳本編程:使用C#語言開發跨平臺遊戲