#!/usr/bin/env bash # 本地部署:与 CDN 相同包结构 → 同步到 scratch-gui/static/unity # # bash tools/deploy-local.sh # bash tools/deploy-local.sh --skip-verify set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" BUILD_DIR="$PROJECT_DIR/build/web-desktop" PACK_DIR="$PROJECT_DIR/build/mstest5" CODE_HTML="${CODE_HTML:-$HOME/tfrh/001code/001code-html}" UNITY_REF="${UNITY_REF:-$HOME/tfrh/竞赛/mstest5}" SKIP_VERIFY=0 usage() { cat <<'EOF' 本地部署(usecdn:false / npm start) 与 CDN 使用同一打包逻辑(package-for-cdn),目录结构一致: Build/mstest5.loader.js StreamingAssets/aa/WebGL/*.bundle levels-database.json(.br) 区别仅在于加载方式:本地从 /unity/ 读取,CDN 从 unitycdndir 读取。 前置: Cocos Creator 已重新构建 Web Desktop(含 level-prefabs 分包) 选项: --build DIR --code-html DIR --unity-ref DIR Unity 参考包(默认 ~/tfrh/竞赛/mstest5) --skip-verify EOF } while [[ $# -gt 0 ]]; do case "$1" in --build) BUILD_DIR="$2"; shift 2 ;; --code-html) CODE_HTML="$2"; shift 2 ;; --unity-ref) UNITY_REF="$2"; shift 2 ;; --skip-verify) SKIP_VERIFY=1; shift ;; -h|--help) usage; exit 0 ;; *) echo "未知参数: $1" >&2; usage; exit 1 ;; esac done if [[ "$SKIP_VERIFY" -eq 0 ]]; then bash "$SCRIPT_DIR/verify-split-build.sh" "$BUILD_DIR" fi BUILD_DIR="$(cd "$BUILD_DIR" && pwd)" UNITY_REF="$(cd "$UNITY_REF" && pwd)" UNITY_STATIC="$CODE_HTML/scratch-gui/static/unity" if [[ ! -f "$UNITY_REF/index.html" || ! -f "$UNITY_REF/StreamingAssets/aa/catalog.json" ]]; then echo "错误: Unity 参考包无效: $UNITY_REF" >&2 exit 1 fi echo "==> [1/2] 打包(与 CDN 相同结构)" node "$SCRIPT_DIR/package-for-cdn.js" "$BUILD_DIR" "$PACK_DIR" "$UNITY_REF" echo "==> [2/2] 导入 static/unity" bash "$SCRIPT_DIR/sync-unity-package-to-static.sh" "$PACK_DIR" "$UNITY_STATIC" echo "" echo "==> 完成" echo " cd \"$CODE_HTML/scratch-gui\" && npm start" echo " http://localhost:8601/editor.html 或 cocos-smoke.html(Cmd+Shift+R)" echo "" echo "config.js: usecdn: false"