Asset Graph(AG)是本系列視覺化工具的第一個介紹到的工具,除了它是官方的工具可以免費取得外,另一個就是當時正好在研究如何導入到專案中。而今天就再利用一點時間來談AG。
本身的作業環境在家中是以Mac為主,而工作的地方則以Windows為主。在引用AG就發現了Pcakage Manager二端存在的差異性。比方說AG在Mac上引用,直接利用Package Manager的引用方式即可
"com.unity.assetgraph": "https://github.com/Unity-Technologies/AssetGraph.git"
但在Windows環境中,會很容易發生拿取時的錯誤,但這個錯誤又比較像是Node NPM的問題。所以在Windows上,最保險的做法就是直接做成本地端Package,方法不複雜,只要將整個Git Repo拿下來後放到該專案的Packages目錄裡即可。不過這個時候Windows上的Unity版本又會有所不同。
AG的package.json檔裡
"version": "1.5.0-preview"
在Unity 2019.3以前的版本,也就是2019.2、2019.1等都可以接受這個版號,但在2019.3版(Windows平台)之後,會認為這個版號不符合規定,被迫要將-perviews
拿掉才可正常使用。
而在Mac上,不管Unity是什麼版本,直接引用Git裡的AG沒有問題,版號也是不會產生錯誤。幸好,除了引用上要做點調整外,實際使用並沒有不同。
AG的節點選單裡,和Addressable有關的就只有
說實在的若是該專案裡有用到Addressable進行Asset打包的話,產生和移除Asset Group的節點應該要加進來。
Addressable雖然底層仍是用Asset Bundle的機制,但在打包時完全不看AssetBundle那定義的Label。也就是位於Inspector最下方的資訊。
從官方的文件可了解到,在AssetBundle的概念中,並沒有Group的概念,一個Asset Bundle就可以代表一個Group的概念。但在Addressable裡是可允許Group分層次(級)的。因此在AG裡提供了Set Asset Group
,這是基本的操作,但在能夠Set前,要先能夠有該Group存在,否則會出現錯誤,而在AG的使用中,都是利用資料的所在位置、命名規則來決定它符合什麼概念,若從AG的角度來看,就必需產生相對應的Group,而後才能夠進行Set的動作。
這樣解釋有些抽象,比方說RPG遊戲裡,有不同怪物的資料以ScriptableObject做成Asset檔,就可以產生一個Monster Group,並將這些Asset檔利用Set Asset Group放進來。又另一種分類方式是該RPG是關卡制,則會用Level 1、Level 2等方式分Group,並按關卡將怪物放入,以方便不同關卡間的引用和移除。
除了產生Group外,移除原生在Group裡的資料或是直接移除該Group的功能在利用Addressble進行打包時也是很重要的一環。
如果AG能夠再加入這些節點,僅從打包Addressable來看,是很夠用了。不過Addressable包出來的產生放置在哪,這和利用Asset Bundle一樣,是開發者要自行處理的。而遊戲的Runtime引用,照理說,Addressable簡單多了,它的存在就是為了要簡化Asset Bundle的使用複雜度,但實際應用上,可能是文件不完整,版本一直在調整,整體在使用上並不會覺得比使用Asset Bundle簡單。
相信隨著Addressable版本穩定,官方文件更完善,教學文章變多的情況下會普及並取代Asset Bundle。在這裡並不涉及過多的Addressable概念和使用情境,有想深入了解的開發者可從這些Link中自行追蹤
之前在介紹AG時也提到對資料的處理也可以利用AssetPostprocessor,不過這陣子想了一下,對資料的處理方式的不同,決定其使用的時間點的不同。
AssetPostprocessor主要用在從其它地方滙入(Photoshop、Max)時所在的處理,並於前置(雖然從滙入的角度來說是後製)處理完後,再用於Unity裡,如後續的動作調整,加上Sahder等。
而AG的使用時機(從現有內附的節點來看)比較像是整體做完後,要進行建置前所需要的打包處理,簡單來說就是歸類、分類。但AG也可以搭配客製化節點,利用AssetPostprocessor進行資料剛滙入的引用。
總之,AG提供了很多可能性,但要不要利用這些可能性、適不適合等還是要按專案評估。
今天將AG和Addressable搭配做簡述,也希望AG開發團隊能夠繼續開發並提升AG的實用度,或許有機會也可以直接透用Shader Graph等UI介面,讓操作更為統一,更具有Unity原生的特色。