Unity 利用反射排查資源中的預設材質

2021-09-01 13:22:50 字數 675 閱讀 9048

接到需求,給資源檢測工具增加乙個功能,排查預設材質。

unity裡面直接建立的模型,很容易附帶上預設材質,這些材質在遊戲執行的時候shader建立非常耗,所以要排除掉。

1.1、物件是material,檢查shader名字是否為"default-material"

1.2、物件是renderer,則取它的sharedmaterials,再根據步驟1.1判斷。因為是資源檔案,所以sharedmatierals足夠。

1.3、物件是gameobject,則取它所有的renderer,再根據步驟1.2判斷。

除此之外,還要求其他asset檔案進行判斷,因為檢測工具傳進來的是unityengine.object _asset,所以我對_asset進行反射然後判斷。

2.1、利用 _asset.gettype()取得型別屬性。

2.2、利用type.getproperties()獲取屬性集合

2.3、對於屬性集合的每乙個propertyinfo,先取它的propertytype,判斷是否為為步驟1.1-1.3之間的型別,否則跳過。注意,先判斷型別再getvalue,像gameobject的rigidbody之類直接取會報錯返回

2.4、 利用getvalue取得實際值,傳入步驟1.1-1.3進行判斷

2.5、利用getfields取得fieldinfo集合,進行2.2-2.4類似的排查。

unity中的C 反射筆記

方式一 type.gettype 型別全名 適合於型別的名稱已知.方式二 obj.gettypel 適合於型別名未知,型別未知,存在已有物件.方式三 typeof 型別 適合於已知型別.方式四 assembly.load xx gettype 名字 適合於型別在另乙個程式集中 動態建立物件.acti...

Unity中的動態載入資源

在unity 3d裡有兩種動態載入機制 一是resources.load 一是通過assetbundle 其實兩者本質上沒有什麼區別。resources.load就是從乙個預設打程序式包裡的assetbundle裡載入資源,而一般assetbundle檔案需要你自己建立,執行時動態載入,可以指定路徑...

unity中頂點片段shader環境反射

最近具體聯絡了一下裡面shader的基本寫法,弄來個綜合版本 然後就是最難看出差異的反射計算問題,頂點裡面計算和片段裡面計算的區別 使用的模型是這個,其中右邊的是平滑法線後的模型 具體的差異可以看下面gif圖 可以看出 下面是 shader unlit shenmifangkeshader norm...