PSD 匯入 Unity:沒有「保留畫布尺寸」選項,圖層位置留在 Prefab 上
先說結論
r/Unity3D 上反覆出現的問題:把 PSD 分層匯入,同時讓每個 Sprite 還保留整張畫布的尺寸和原來的偏移。那條討論最後停在兩個建議——自己從 Photoshop 裡逐層匯出,或者把多出來的透明區域當成設計上的問題。這個行為背後的機制沒有被說清楚。
PSD Importer 裡並沒有這樣一個設定。位置保留在另一個地方:匯入時生成的 Prefab。第二次匯入時,畫布或圖層尺寸變了,SpriteRect 也不會跟著更新。要對回去,只能在 Sprite Editor 裡手改 rect,或者應用 Automatic Reslice——後者會丟掉這一組裡所有手工修改。
Individual Sprites (Mosaic) 實際產出什麼
把 Texture Type(貼圖型別)設為 Sprite (2D and UI),Sprite Mode(Sprite 模式)設為 Multiple,Import Mode(匯入模式)設為 Individual Sprites (Mosaic)。圖層會打包成一張 Texture,每個圖層對應一個 SpriteRect,每個 SpriteRect 跟著該圖層自身的畫面走。2048 畫素畫布上一個 32 畫素的圓,匯入後就是一個 32 畫素的 Sprite。
這個選項旁邊有兩項 padding 設定,都不會把畫布還原回來。Mosaic Padding 控制打包 Texture 裡圖層之間的間距。Sprite Padding 是 PSD Importer 8.0.0(Unity 2022.2)加入的,作用是把每個 Sprite 在 Texture 裡的 rect 放大一點。兩者調整的都是間距,rect 的起點仍然是圖層畫面。Sprite Editor 裡的 Trim(收緊)方向相同,把 rect 收到不透明畫素的邊緣;想反過來把 rect 放大,只能一個 Sprite 一個 Sprite 手動改。
位置保留在 Prefab 裡,不在 Sprite 裡
Character Rig → Use as Rig(作為骨架使用)會根據原始檔生成一個 Prefab。Sprite 的層級和位置來自圖層層級、以及這些圖層在 PSD 裡的位置,每個 Sprite 還會拿到一個按圖層順序排的 Order in Layer 值,所以 Prefab 能把原始檔的排布復原出來。Use Layer Grouping(保留圖層分組)會把 Photoshop 的分組保留成父節點。
Inspector 裡這一段只在 Sprite Mode 為 Multiple、Import Mode 為 Individual Sprites (Mosaic)、並且已經安裝 2D Animation 包時才出現。Unity 把同一組開關寫在「為動畫準備美術素材」這一節下面,那裡預期的產出是一個能綁骨骼的角色 actor,配 .skeleton 資源和 Skinning Editor。兩種讀法下位置都能還原,只是一屏 UI 這樣匯入進來,得到的是一個動畫 actor,Canvas 層級還要另外搭。

所以那條討論其實有答案可用:相對比例和位置已經被處理掉了,每個 Sprite 保留畫布尺寸並不是提供這兩樣東西的開關。
檔案格式和被忽略的圖層屬性的代價
.psd 檔案預設走普通的 Texture Importer,會被壓平。要走分層這條路,需要選中檔案,把 Importer 下拉改成 UnityEditor.U2D.PSD.PSDImporter,或者直接用 .psb——PSD Importer 針對的就是這個格式,單邊最大支援 300,000 畫素。儲存時開啟 Maximize Compatibility(最大相容)。
生成 Sprite 和 Prefab 時,有四類 Photoshop 圖層屬性會被丟掉:Channels(通道)、Blend Modes(混合模式)、Layer Opacity(圖層不透明度)、Effects(圖層效果)。一張畫面依賴正片疊底圖層或者 40% 不透明度陰影的圖,匯入後這些都被壓平了,想把畫面還原成原始檔的樣子,就變成在 Unity 裡寫 shader、調材質的活。
第二次匯入
SpriteRect 的資料按 Layer ID 持久化,手工改過的內容才能在重新匯入之後留下來。同一個機制也意味著:原始檔裡改了圖層或畫布尺寸,SpriteRect 的大小和位置不會跟著變。要把它對回去,只能在 Sprite Editor 裡改 rect,或者應用 Automatic Reslice(自動重新切分)——後者會按當前原始檔重新生成全部 rect,並丟掉這一組裡所有手工修改。
一個角色檔案,這個代價是已知的。一屏會被重新生成的介面,或者一整個資料夾等著做同樣處理的 PSD,才是 batch 這個詞出現在搜尋裡的原因。PSD 到 Unity 走的是另一條路:分層這一步在 Editor 之外完成,然後一次匯出寫出 Assets/Prefabs 和 Assets/Textures,命名和目錄結構跟著檔案一起到位。

小結
畫布尺寸不是解決這個問題該調的地方。單個檔案上,位置已經由 Use as Rig 還原。重新生成的一屏介面,或者一整個資料夾的 PSD,每次再匯入時 SpriteRect 還是舊尺寸,每個檔案都要再做一遍同樣的 rect 調整。