原創文章,轉載請注明出處。
打包之後Mesh沒有材質問題
- 前言
- 解決方案
-
- 1>先确認資源是否被Cook
- 2>确認你的材質所處的路徑是不是有中文
- 3>材質的Usage守則,确認你的資源是什麼類型,再去對應材質的Usage是否比對
- 4>加載外部的Pak沒有材質
前言
UE4在打包之後有時候會遇到Material丢失的問題(都是DefuaultMaterial灰色材質),編輯器下運作是正常的,如果你也遇到了,那麼可以在這裡停留一下看看有沒有你想要的答案。
解決方案
1>先确認資源是否被Cook
先确認你的材質是否有被引用,其實這個目的是要确認你的資源是否被Cook,也就是确認其是否被打到了你的Pak裡面。
如何确認:
看下面的圖檔,對應轉成你自己項目的Saved/Cooked/…… 目錄下,找到你的那個丢失材質的名字,看看裡面有沒有。

到這裡的話,你應該就能确認是不是沒有被Cook了。
如果沒有,按照下面的确認一下,如果有的話,就不用看這個标題了。
其實這個引用關系确認,不單适用于材質丢失,其他的任意uasset都有可能沒有被cook上。
首先引擎cook資源是下面的原則
1)你要打包的umap裡面所有被引用到的資源都統統會被cook,都是靜态的在umap裡面存好的,比如你在代碼裡寫的動态的Load一個資源,這個時候其實是這個資源打包時候引擎是不知道引用關系的。是以需要按照下面步驟指定一下
2)指定額外要cook的目錄,在項目設定Packaging->Additional Asset Directories to Cook路徑數組中指定的,在這裡添加上之後你的資源就會被Cook到了。
并注意挨着的下面還有一個Directories to never cook(這個路徑代表指你不想cook的路徑添加到這裡),當然你用的的資源确認也不能在這個路徑裡面出現
如果是你資源沒有被Cook,那麼按照上面步驟操作完再打包看看。
2>确認你的材質所處的路徑是不是有中文
在4.25引擎版本中,對中文資源支援不友好,像4.26.2就沒事。比如UMG上給Image設定一張圖檔(中文圖檔或圖檔處于中文路徑中),發現設定不上,英文的就可以。
我隻是發現4.25下中文有問題,當然你确認一下你目前使用的引擎版本是不是也存在這樣的問題。
如果存在的話,再看你的材質是不是在中文路徑裡,如果是,那麼基本上将其放到英文路徑裡面問題就好了。
還是最好用英文,一是規範,二是減少出錯找問題的時間。
3>材質的Usage守則,确認你的資源是什麼類型,再去對應材質的Usage是否比對
每個UMaterial上都有個Usage的屬性數組,這個資料決定了你的材質可以被應用到哪些UE的類型上
(比如是否能應該到Skeletal Mesh骨骼網格/Instanced Static Meshes靜态網格執行個體等等)如下
原理其實就是你這個材質會應用到哪些UE的類型上,如果你這個材質Usage上面沒有選InstanceStaticMesh但是你用到了InstanceStaticMesh上,那麼就會出現沒有材質的情況。
如果你也是類似情況,不妨打開材質看一下usage這裡。
比如下圖的小汽車打包後就是沒有材質的,資源也被cook了,也沒有中文路徑。但是就是材質屬性之勾選了Skeletal Mesh,但是我是通過Brush将車刷到場景中的,這個類型其實是AInstancedFoliageActor,其實就是常用的刷植被的功能。最終對應到的是InstanceStaticMesh上,是以我在汽車的每個材質球的Usage中增加了InstanceStaticMesh的選項。再打包效果就對了。
4>加載外部的Pak沒有材質
這片文章中介紹了加載單獨的Pak内沒有材質的情況
謝謝,創作不易,大俠請留步… 動起可愛的雙手,來個關注再走呗
ღ( ´・ᴗ・` )比心<( ̄︶ ̄)>