Complete Cocos Creator port with level bundles, themes, and tooling.

Adds level prefabs, theme assets, audio, extensions, and deployment scripts for the Unity WebGL migration.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-16 15:30:58 +08:00
parent cba5105908
commit d393302388
6248 changed files with 17322729 additions and 11036 deletions

111
tools/package-for-project.sh Executable file
View File

@@ -0,0 +1,111 @@
#!/usr/bin/env bash
# 步骤 1打包 — 单一运行时包,本地与 CDN 完全一致
#
# bash tools/package-for-project.sh
#
# 产物:
# build/mstest5/ 运行时包(← 本地 import + OSS 上传,内容相同)
# build/deploy/ 上传清单(不进 OSS / static
# build/standalone-player/ 独立调试页(可选,不进 OSS / static
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
BUILD_DIR="$PROJECT_DIR/build/web-desktop"
MODE="cdn"
OUT_DIR="$PROJECT_DIR/build/mstest5"
DEPLOY_DIR="$PROJECT_DIR/build/deploy"
CDN_BASE=""
PKG_EXTRA=()
CDN_REF="${COCOS_CDN_UNITY_REF:-$HOME/tfrh/竞赛/mstest5}"
SKIP_MANIFEST=0
MAKE_ZIP=0
usage() {
echo "步骤 1 - 打包(单一运行时包)" >&2
echo "" >&2
echo "用法: $0 [options]" >&2
echo " --build DIR Cocos 构建目录(默认 build/web-desktop" >&2
echo " --out DIR 运行时包目录(默认 build/mstest5" >&2
echo " --mode cdn|flat cdn=默认; flat=旧扁平包(不推荐)" >&2
echo " --cdn-base URL 写入 deploy/UPLOAD-MANIFEST.txt" >&2
echo " --skip-manifest 不生成 deploy/ 清单" >&2
echo " --zip 额外生成 build/mstest5-runtime.zip" >&2
echo "" >&2
echo "默认分包: assets_all 首屏含 level-prefabs 壳;每关独立 bundle 进关按需" >&2
echo " MERGE_LEVELS=1 合并 level-prefabs 进 assets_all不推荐" >&2
echo "运行时包结构(本地 static/unity = OSS unitycdndir:" >&2
echo " Build/ StreamingAssets/ levels-database.json(.br)" >&2
echo "" >&2
echo "步骤 2: scratch-gui/static/unity/import-to-unity.sh" >&2
}
while [[ $# -gt 0 ]]; do
case "$1" in
--build) BUILD_DIR="$2"; shift 2 ;;
--out) OUT_DIR="$2"; shift 2 ;;
--mode) MODE="$2"; shift 2 ;;
--cdn-base) CDN_BASE="$2"; shift 2 ;;
--skip-manifest) SKIP_MANIFEST=1; shift ;;
--zip) MAKE_ZIP=1; shift ;;
--brotli-db) PKG_EXTRA+=(--brotli-db); shift ;;
--preload-resources) PKG_EXTRA+=(--preload-resources); shift ;;
--no-minify-db) PKG_EXTRA+=(--no-minify-db); shift ;;
-h|--help) usage; exit 0 ;;
*) echo "未知参数: $1" >&2; usage; exit 1 ;;
esac
done
[[ -f "$BUILD_DIR/index.js" || -f "$BUILD_DIR/index.html" ]] || {
echo "错误: 请先 Cocos 构建 Web Desktop: $BUILD_DIR" >&2
exit 1
}
DB="$PROJECT_DIR/assets/level-data/levels-database.json"
if [[ ! -f "$DB" ]] || [[ "$(python3 -c "import json; d=json.load(open('$DB')); print(len(d.get('levels',{})))" 2>/dev/null || echo 0)" -lt 100 ]]; then
echo "==> 从 Cocos 导出关卡库"
bash "$SCRIPT_DIR/sync-level-db.sh"
fi
case "$MODE" in
cdn)
CDN_REF="$(cd "$CDN_REF" 2>/dev/null && pwd || true)"
if [[ -z "$CDN_REF" || ! -f "$CDN_REF/StreamingAssets/aa/catalog.json" ]]; then
echo "错误: 缺少 Unity 参考包: $CDN_REF" >&2
exit 1
fi
# 移除旧的双份产物
rm -rf "$PROJECT_DIR/build/cdn-upload" "$PROJECT_DIR/build/cdn-upload.zip" 2>/dev/null || true
echo "==> [1/2] 打运行时包"
bash "$SCRIPT_DIR/verify-split-build.sh" "$BUILD_DIR"
node "$SCRIPT_DIR/package-for-cdn.js" "$BUILD_DIR" "$OUT_DIR" "$CDN_REF"
if [[ "$SKIP_MANIFEST" -eq 0 ]]; then
echo "==> [2/2] 生成 OSS 上传清单build/deploy/,不复制包)"
MANIFEST_ARGS=("$OUT_DIR" --manifest-dir "$DEPLOY_DIR")
[[ -n "$CDN_BASE" ]] && MANIFEST_ARGS+=(--cdn-base "$CDN_BASE")
[[ "$MAKE_ZIP" -eq 1 ]] && MANIFEST_ARGS+=(--zip)
node "$SCRIPT_DIR/write-deploy-manifest.js" "${MANIFEST_ARGS[@]}"
fi
;;
flat)
OUT_DIR="${OUT_DIR:-$PROJECT_DIR/build/unity-runtime}"
echo "==> [警告] flat 模式与 CDN 不一致" >&2
if ((${#PKG_EXTRA[@]} > 0)); then
node "$SCRIPT_DIR/package-for-project.js" "$BUILD_DIR" "$OUT_DIR" "${PKG_EXTRA[@]}"
else
node "$SCRIPT_DIR/package-for-project.js" "$BUILD_DIR" "$OUT_DIR"
fi
;;
*)
echo "错误: --mode 须为 cdn 或 flat" >&2
exit 1
;;
esac
echo ""
echo "==> 运行时包: $OUT_DIR"
echo " 本地: import-to-unity.sh"
echo " CDN: 上传 $OUT_DIR/ 全部 → unitycdndir"
[[ "$SKIP_MANIFEST" -eq 0 && "$MODE" == "cdn" ]] && echo " 清单: $DEPLOY_DIR/UPLOAD-MANIFEST.txt"