把 Unity SpriteAtlas 產生的 PNG 圖集在合併前就用機械規則擋下來:POT(寬高皆為 2 的冪)、依專案契約檢查 RGBA 透明、以及 max_bytes 體積閘門。下文假設你已有一台長開機的 遠端 Mac,並透過 OpenClaw Gateway 只開必要的 shell/路徑白名單,讓美術與程式讀同一份 README 就能還原。
目錄監聽策略 · 批次處理指令範本 · 失敗重試與日誌歸檔 · 排障 FAQ
精靈圖交付維度可先對照 CSS 切片與倍率矩陣;監聽、退避與 JSONL 欄位命名建議直接對齊 PNG 監聽、重試與日誌歸檔。若通過閘門後仍要縮體積,另排 pngquant/zopflipng 矩陣,與「執行期壓縮」決策表一起版本控管。
目錄監聽策略
實例:在專案庫外(或庫內已 .gitignore)建立 Exports/SpriteAtlas/,Unity Editor 腳本將檔名寫成 atlas_hud_1024.png.tmp,fsync 後再 mv 成 .png。這樣 fswatch 只會在「可讀的完整檔」出現時收到穩定事件。安裝:brew install fswatch。監聽根請用本機 NVMe 絕對路徑,不要指向雲端同步夾,否則會看到大量重複事件與半寫入。
防抖用靜默視窗:每次事件刷新計時器,例如連續 12 秒沒有新事件才啟動一輪巡檢;並用單一飛行(鎖檔或 flock)避免連續「Build/Reimport」把十幾個工作佇列塞爆。OpenClaw 端只允許讀寫 Exports、logs、quarantine 三棵子樹;閘道與權杖設定請依 OpenClaw 全平台安裝指南 與實際執行帳號做一次煙測。需要把通知丟到捷徑時,可參考 Gateway 串 Shortcuts 的目錄契約。
觸發鏈可寫成「fswatch -o "$ROOT" → 靜默計時器到期 → bash ./bin/atlas-scan.sh」,並在 README 註明 Unity 版本、ImageMagick 主版本與 ATLAS_EXPORT_ROOT;半年後換人維運時,只要路徑與環境變數對得上就能重播。若 Atlas 分「執行期壓縮」與「離線 PNG 匯出」兩條產物,請用子目錄拆開,避免同一個 watcher 混到不同契約。
批次處理指令範本
下列 bash 骨架示範「列舉 → 寸法與通道 → 位元組」順序;REQUIRE_ALPHA=1 時強制 channels 字串含 rgba(依 ImageMagick 版本略有差異,若你環境回傳 srgba,把條件改成子字串比對即可)。
#!/usr/bin/env bash
set -euo pipefail
ROOT="${ATLAS_EXPORT_ROOT:?}"
MAX_BYTES="${MAX_BYTES:-1200000}"
REQUIRE_ALPHA="${REQUIRE_ALPHA:-1}"
is_pot() { local n="$1"; [[ "$n" =~ ^[0-9]+$ ]] && (( (n > 0) && (n & (n-1)) == 0 )); }
while IFS= read -r -d '' f; do
[[ "$f" == *.png ]] || continue
w=$(magick identify -format '%w' "$f")
h=$(magick identify -format '%h' "$f")
ch=$(magick identify -format '%[channels]' "$f")
bytes=$(stat -f%z "$f")
ok=1
is_pot "$w" || ok=0
is_pot "$h" || ok=0
[[ "$REQUIRE_ALPHA" == "1" && "$ch" != *rgba* ]] && ok=0
(( bytes <= MAX_BYTES )) || ok=0
printf '{"file":"%s","w":%s,"h":%s,"channels":"%s","bytes":%s,"ok":%s}\n' \
"$f" "$w" "$h" "$ch" "$bytes" "$ok" >> "${LOG_DIR:-./logs}/atlas-scan.jsonl"
done < <(find "$ROOT" -type f -name '*.png' -print0)
ok=0 的列建議再包一層:依失敗原因寫 reason_code(pot/alpha/size),並將檔案移入 quarantine/YYYYMMDD/,避免與下一輪合格輸出混在一起。欄位格式與對外告警應與團隊既有 JSONL 解析器一致,必要時在 README 貼一筆範例行。
失敗重試與日誌歸檔
可重試:僅限暫時性 I/O、磁碟尖峰、identify 偶發逾時——用指數退避(例如 2s、4s、8s,封頂 60s)並設最大嘗試次數。不可自動重試:POT 不符、通道不符、穩定寫入後仍超過 MAX_BYTES,一律進 quarantine,避免無意義重試刷滿 CPU。每日將 atlas-scan.jsonl 以 gzip 收進 archive/YYYY-MM-DD/;成功批次只保留一行摘要(檔數、最大位元組、耗時),失敗保留完整路徑與欄位供事後稽核。
夜間批次若與遊戲 CI 同機,記得在 launchd plist 寫死 PATH(含 magick)、工作目錄與 ATLAS_EXPORT_ROOT,並監看磁碟水位;細節欄位與目錄六分區仍建議併讀 監聽與日誌歸檔 文的表格。
排障 FAQ
畫面看起來銳利但巡檢報 POT 失敗:常見是匯出被裁成非 2 的冪邊長;回到 Atlas 最大尺寸與 padding 政策,必要時在表內註明「允許的最大非 POT 圖集」並改閘門,而不是默默改圖。同一檔案位元組數每日漂移:代表壓縮設定或平台覆寫在飄;鎖定 Build Target 與 TextureImporter 版本號寫進 YAML。只有半夜失敗:檢查主機睡眠、外接碟卸載與 VPN 斷線;將監聽根改到內建 SSD 通查一輪。
MAX_BYTES 建議按裝置等級分表(例如手機 1×、平板 2×)並與程式讀取策略一起檢閱。
總結:原子寫入、靜默視窗加單一飛行、magick identify 與 stat 雙閘門、附 reason_code 的隔離與 JSONL gzip,就能把 SpriteAtlas 納品風險壓在自動化層。租機與計費請見站內 購買、定價、說明與幫助(免登入)。