10-01-实战-环境搭建与集成

实战-环境搭建与集成

篇章 :10-实战篇-从零搭建 状态 :已完成 阅读时间:约 20 分钟


一、引言

1.1 本章在系列中的定位

从本章开始,我们进入实战篇 。前面 9 章已系统讲解了 YooAsset 的认知、原理、架构、源码与核心技术,本章和后续章节将通过可操作的步骤带你从零搭建一个完整的 YooAsset 项目。

实战篇的特点是:

  • 步骤具体到"点哪个菜单、敲哪行命令"
  • 配以可直接运行的代码
  • 强调工程实践(CI/CD、监控、灰度)

1.2 本章要解决的核心问题

  • 如何在 Unity 项目中安装 YooAsset?
  • Unity 版本与 YooAsset 版本如何匹配?
  • 一个标准的 YooAsset 项目目录结构是什么样的?
  • 第一个 YooAsset Hello World 怎么跑起来?

1.3 阅读前置要求

  • 已安装 Unity 2022 LTS 或更高版本
  • 熟悉 Unity 编辑器基本操作
  • 了解 Git 基本使用
  • 拥有 GitHub 账号(推荐)

二、UPM 安装 YooAsset

2.1 通过 UPM Git URL 安装(推荐)

步骤详解

步骤 1:打开 Unity 编辑器

启动 Unity,打开你的项目。

步骤 2:打开 Package Manager

菜单栏:Window → Package Manager

步骤 3:添加 Git URL

点击左上角 + 按钮 → 选择 Add package from git URL

步骤 4:输入 YooAsset 的 Git URL

arduino 复制代码
https://github.com/tuyoogame/YooAsset.git

或者使用指定版本:

bash 复制代码
https://github.com/tuyoogame/YooAsset.git#v2.2.4

步骤 5:等待安装完成

首次安装约需 1-3 分钟(取决于网络)。安装完成后,Unity 会自动:

  • 拉取 YooAsset 的 C# 源码
  • 生成 .meta 文件
  • 触发 Library 重新生成
验证安装

安装成功后,应能在以下位置看到 YooAsset:

json 复制代码
Project 视图
└── Packages/
    └── manifest.json
        └── "com.yoozoo.yooasset": "https://github.com/tuyoogame/YooAsset.git"

菜单栏应出现 YooAsset 菜单:

erlang 复制代码
菜单栏
├── File
├── Edit
├── ...
└── YooAsset  ← 看到这个说明安装成功
    ├── Build
    ├── Create
    └── ...

2.2 通过 UPM tarball 安装(离线场景)

如果网络受限,可以下载 Release 包后通过 tarball 安装:

步骤 1:下载 Release

访问 github.com/tuyoogame/Y... .tar.gz 包。

步骤 2:本地安装

Package Manager → + → Add package from tarball → 选择下载的 .tar.gz 文件。

2.3 手动导入(不推荐)

下载 Release 的 .zip 包,解压后放到项目的 Packages/com.yoozoo.yooasset/ 目录下。

erlang 复制代码
Assets/  (不要放到这里)
└── ...
Packages/
└── com.yoozoo.yooasset/  ← 放这里
    ├── package.json
    ├── Runtime/
    ├── Editor/
    └── ...

2.4 安装常见问题

问题 原因 解决方案
安装超时 网络问题 改用国内镜像或挂代理
版本冲突 依赖不兼容 删除 Library/PackageCache/ 后重试
编辑器报错 Unity 版本不兼容 升级到 Unity 2022 LTS
菜单不显示 安装未完成 等待 Library 重新生成完成

三、版本选择

3.1 Unity 版本兼容性

YooAsset 支持的 Unity 版本范围:

Unity 版本 YooAsset 支持 推荐度
2019.4 LTS ✅ ★★★
2020.3 LTS ✅ ★★★★
2021.3 LTS ✅ ★★★★
2022.3 LTS ✅ ★★★★★(推荐)
2023.x ✅ ★★★★
6000.x (Unity 6) ✅ ★★★★

推荐 :Unity 2022.3 LTS,是当下最稳定的 LTS 版本。

3.2 YooAsset 版本选择

3.2.1 版本发布节奏

YooAsset 由 tuyoogame 团队维护,发版节奏:

  • 主版本(如 v2.x):大改,可能有 Breaking Change
  • 次版本(如 v2.2.x):新功能,向后兼容
  • 修订版本(如 v2.2.4):Bug 修复
3.2.2 选版本原则
项目阶段 推荐版本
新项目立项 最新稳定版(v2.2.x)
在研项目 当前使用的稳定版(不轻易升级)
长期维护 LTS 标签的版本
实验性需求 最新主版本(接受 Breaking Change)
3.2.3 升级策略

YooAsset 的升级通常很简单(API 稳定性高),但仍建议:

  1. 先在测试分支升级
  2. 跑通回归测试
  3. 小流量灰度
  4. 全量发布

3.3 依赖检查

YooAsset 的核心依赖极少,主要包括:

json 复制代码
{
  "dependencies": {
    "com.unity.scriptablebuildpipeline": "1.21.5",  // 自动包含
    "com.unity.modules.imgui": "1.0.0",
    "com.unity.modules.ui": "1.0.0"
  }
}

可选依赖:

  • com.unity.nuget.newtonsoft-json(用于 JSON 序列化)
  • com.unity.scriptablebuildpipeline(构建时使用,Unity 自带)

四、项目结构准备

4.1 推荐的目录结构

bash 复制代码
MyGame/
├── Assets/
│   ├── Art/                # 美术资源
│   │   ├── Characters/     # 角色
│   │   ├── Environments/   # 场景
│   │   ├── UI/             # UI 资源
│   │   ├── Effects/        # 特效
│   │   └── Audio/          # 音频
│   ├── Configs/            # 配置表
│   │   ├── Character.json
│   │   ├── Skill.json
│   │   └── Item.json
│   ├── Scenes/             # 场景
│   │   ├── Boot.unity
│   │   ├── MainCity.unity
│   │   └── Battle.*.unity
│   ├── Scripts/            # 业务代码
│   │   ├── Common/
│   │   ├── Battle/
│   │   ├── UI/
│   │   └── Network/
│   ├── Startup/            # 首包资源(关键)
│   │   ├── UI/
│   │   │   ├── Logo.png
│   │   │   └── Loading.unity
│   │   └── Scripts/
│   │       └── GameLauncher.cs
│   ├── YooAsset/           # YooAsset 配置
│   │   ├── PackageSettings.asset
│   │   ├── GroupSettings/
│   │   │   ├── DefaultPackage.asset
│   │   │   ├── ActivityPackage.asset
│   │   │   └── DLCPackage.asset
│   │   └── BuildScript.cs
│   └── Resources/          # 首包必要(YooAsset 引导)
│       └── YooAssetConfig.json
│
├── ProjectSettings/        # Unity 项目设置
├── Packages/
│   └── manifest.json
└── ...

4.2 YooAsset 配置目录详解

4.2.1 PackageSettings.asset

全局配置,存放在 Assets/YooAsset/ 目录下,记录:

  • 全局 PlayMode
  • 默认 CDN URL
  • 默认加密配置
  • 默认压缩配置
4.2.2 GroupSettings/

每个 Group 一个配置文件:

csharp 复制代码
// DefaultPackage.asset
public class YooAssetPackageConfig
{
    public string PackageName = "DefaultPackage";
    public string PackageVersion = "1.0.0";
    public EPlayMode DefaultPlayMode = EPlayMode.HostPlayMode;
    public string HostServerURL = "https://res-cdn.example.com/v1/";
}
4.2.3 BuildScript.cs

构建脚本,定义如何打包:

csharp 复制代码
public class GameBuildScript
{
    [MenuItem("YooAsset/Build")]
    public static void Build()
    {
        var buildParams = new BuildParameters
        {
            BuildOutputRoot = "D:/Builds/MyGame",
            BuildVersion = PlayerSettings.bundleVersion,
            BuildTarget = BuildTarget.Android,
            BuildPipeline = EBuildPipeline.ScriptableBuildPipeline,
            CompressOption = ECompressOption.LZ4,
            CopyToStreamingAssets = true
        };
        
        var pipeline = new ScriptableBuildPipeline();
        pipeline.Build(buildParams);
    }
}

4.3 Resources 与 StreamingAssets 的取舍

4.3.1 Resources/

YooAsset 启动需要读取本地清单,必须有一个 Resources 中的配置:

复制代码
Resources/
└── YooAssetConfig.json

内容示例:

json 复制代码
{
  "DefaultPackageName": "DefaultPackage",
  "DefaultPlayMode": "HostPlayMode",
  "HostServerURL": "https://res-cdn.example.com/v1/",
  "FallbackHostServerURL": "https://res-cdn-bj.example.com/v1/"
}
4.3.2 StreamingAssets/

构建时,YooAsset 会把首包资源拷贝到 StreamingAssets/,包括:

  • 内置 Bundle 文件
  • 内置 Manifest

注意 :StreamingAssets 的文件大小会计入包体,要严格控制。


五、第一个 YooAsset 项目

5.1 创建 Package

步骤 1:打开 YooAsset 创建菜单

YooAsset → Create → Package

步骤 2:选择存储位置

选择 Assets/YooAsset/GroupSettings/DefaultPackage.asset

步骤 3:配置 Package

csharp 复制代码
PackageName:        DefaultPackage
PackageVersion:     1.0.0
DefaultPlayMode:    HostPlayMode
HostServerURL:      https://res-cdn.example.com/v1/

5.2 创建 Group

步骤 1:在 Package 下创建 Group

YooAsset → Create → Group

步骤 2:配置 Group

csharp 复制代码
GroupName:        Main
GroupDesc:        主包资源
PackRule:         ByFile  // 按文件打包
CompressOption:   LZ4

5.3 创建 Collector

步骤 1:在 Group 下创建 Collector

步骤 2:配置 Collector

csharp 复制代码
CollectorName:     MainCollector
CollectFolder:     Assets/Art
SearchPattern:     *
PackToBundle:      Auto
AddressMode:       Location

步骤 3:测试收集

YooAsset → Collect Asset

应该看到:

  • 收集到 N 个资源
  • 预计生成 M 个 Bundle

5.4 第一次打包

步骤详解

步骤 1:打开构建窗口

YooAsset → Build AssetBundle

步骤 2:配置构建参数

csharp 复制代码
BuildTarget:       Android  // 首次建议 Android/Windows
BuildPipeline:     ScriptableBuildPipeline
CompressOption:    LZ4
EncryptionOption:  None     // 首次测试不加密
CopyToStreaming:   true     // 自动拷贝到 StreamingAssets
OutputPath:        D:/Builds/MyGame

步骤 3:执行构建

点击 Build 按钮,等待完成。

构建结果

构建成功后,输出目录结构:

javascript 复制代码
D:/Builds/MyGame/
├── BuildReport.html       ← 构建报告
├── BuildLog.txt
└── Android/
    ├── PackageManifest_1.0.0.bytes
    ├── PackageManifest_1.0.0.hash
    └── bundles/
        ├── bundle_01
        ├── bundle_02
        └── ...
验证清单

在 Unity 编辑器中查看 Assets/StreamingAssets/yooasset/:

erlang 复制代码
StreamingAssets/
└── yooasset/
    ├── DefaultPackage/
    │   ├── PackageManifest_1.0.0.bytes
    │   └── ...
    └── bundles/
        ├── bundle_01
        └── ...

5.5 第一个加载测试

编辑器测试

步骤 1:创建测试脚本

csharp 复制代码
using UnityEngine;
using YooAsset;

public class YooAssetHelloWorld : MonoBehaviour
{
    async void Start()
    {
        // 1. 初始化
        var initOp = YooAssets.InitializeAsync();
        await initOp.Task;
        
        if (initOp.Status != EOperationStatus.Succeed)
        {
            Debug.LogError($"初始化失败: {initOp.Error}");
            return;
        }
        
        // 2. 加载一个 Sprite
        var spriteOp = YooAssets.LoadAssetAsync<Sprite>("Assets/Art/UI/Icon.png");
        await spriteOp.Task;
        
        if (spriteOp.Status == EOperationStatus.Succeed)
        {
            Debug.Log($"加载成功: {spriteOp.Result.name}");
            // 显示在 UI 上
            GetComponent<SpriteRenderer>().sprite = spriteOp.Result;
        }
    }
}

步骤 2:配置 PlayMode

YooAsset → PlayMode → EditorPlayMode(编辑器内使用,无需服务器)

步骤 3:运行场景

点击 Play 按钮,应该能看到 Sprite 加载成功。

常见运行错误
错误 原因 解决
初始化失败 Package 名错误 检查 PackageSettings
资源找不到 Address 错误 运行 Collect Asset 重新生成
Bundle 加载失败 未构建 重新 Build
PlayMode 错 未设置 PlayMode 在 PlayMode 菜单中设置

六、CI/CD 集成

6.1 命令行构建

YooAsset 支持纯命令行构建:

bash 复制代码
# Windows
Unity.exe -batchmode -quit -projectPath <project> -executeMethod YooAsset.Editor.BuildPipeline.Build
csharp 复制代码
public class BuildPipeline
{
    public static void Build()
    {
        var buildParams = new BuildParameters
        {
            BuildOutputRoot = System.Environment.GetEnvironmentVariable("BUILD_OUTPUT") ?? "Builds",
            BuildVersion = System.Environment.GetEnvironmentVariable("BUILD_VERSION") ?? "1.0.0",
            BuildTarget = (BuildTarget)Enum.Parse(typeof(BuildTarget), 
                System.Environment.GetEnvironmentVariable("BUILD_TARGET") ?? "Android"),
        };
        
        new ScriptableBuildPipeline().Build(buildParams);
    }
}

6.2 Jenkins 集成

groovy 复制代码
// Jenkinsfile
pipeline {
    agent any
    
    stages {
        stage('Build') {
            steps {
                sh '''
                    export BUILD_OUTPUT=${WORKSPACE}/Builds
                    export BUILD_VERSION=${BUILD_NUMBER}
                    export BUILD_TARGET=Android
                    Unity -batchmode -quit -projectPath . -executeMethod YooAsset.Editor.BuildPipeline.Build
                '''
            }
        }
        stage('Upload') {
            steps {
                sh '''
                    python upload.py $BUILD_OUTPUT $BUILD_VERSION
                '''
            }
        }
    }
}

七、调试技巧

7.1 编辑器调试

YooAsset 提供 Editor 模式下的调试窗口:

YooAsset → Debug Window

可以看到:

  • 当前所有 Package 的状态
  • 加载中的操作
  • 已加载的资源
  • 内存占用

7.2 日志配置

csharp 复制代码
public class LogConfig
{
    public static void Setup()
    {
        YooAssetLogger.LogHandler = (level, message) =>
        {
            switch (level)
            {
                case ELogLevel.Error:
                    Debug.LogError($"[YooAsset] {message}");
                    break;
                case ELogLevel.Warning:
                    Debug.LogWarning($"[YooAsset] {message}");
                    break;
                default:
                    Debug.Log($"[YooAsset] {message}");
                    break;
            }
        };
    }
}

7.3 常见调试场景

场景 1:资源找不到

csharp 复制代码
// 开启详细日志
YooAssetLogger.LogLevel = ELogLevel.Debug;

// 加载时打印
Debug.Log($"尝试加载: {location}");
var op = YooAssets.LoadAssetAsync<Sprite>(location);
await op.Task;
Debug.Log($"加载结果: status={op.Status}, error={op.Error}");

场景 2:构建失败

查看 BuildLog.txt,通常包含:

  • 哪个资源报错
  • 依赖关系
  • Bundle 划分建议

八、总结

8.1 本章要点回顾

  • 安装方式:UPM Git URL 是最推荐的安装方式
  • 版本选择:Unity 2022 LTS + YooAsset 最新稳定版
  • 目录结构:Assets/YooAsset 是配置根目录
  • Hello World:第一次跑通需要 Package → Group → Collector → Build → Load 五个步骤

8.2 与前后章节的关联

  • 前章:09 章解决了部署与生态问题
  • 本章:从零搭建 YooAsset 项目
  • 后章:10-02 将对比 YooAsset 与原生 AssetBundle

8.3 实践建议

  1. 优先用 UPM Git URL 安装:便于升级和版本管理
  2. 使用 Unity 2022 LTS:当前最稳定的 LTS 版本
  3. 首包要严格控制:只放启动必需的资源
  4. 每次配置改动都重新构建:避免缓存导致的奇怪问题
  5. 保留构建日志:便于排查问题

上一篇 :UOS CDN与服务器部署(../09-生态篇-集成与协同/09-04-生态-UOS CDN与服务器部署.md) 下一篇 :Unity 原生 AssetBundle 实战

相关推荐
SmalBox14 小时前
09-04-生态-UOS CDN与服务器部署
unity3d·游戏开发
️公子1 天前
可插拔 13 款实时棋牌对战平台实践:房间容器、Plugin SDK 与幂等账本
websocket·typescript·游戏开发·monorepo·插件架构·棋牌平台·实时对战
SmalBox2 天前
09-03-生态-与GameFramework-xAsset等框架集成
unity3d·游戏开发
SmalBox3 天前
09-02-生态-小游戏平台适配
unity3d·游戏开发
ZzT3 天前
vibe coding 做小游戏·玩法重做篇:只留自走棋、去掉羁绊,用电脑自动对局调难度
ai编程·游戏开发
SmalBox3 天前
09-01-生态-YooAsset+HybridCLR热更新方案
unity3d·游戏开发
房西杭5 天前
AttrMgr 属性管理器(传奇MMO Lua服务端)
游戏开发
超爱吃士力架6 天前
程序员的副业 IP 探索之路----小白用AI做了个游戏,发出去第一天居然有300多个人玩!!!
游戏开发
SmalBox6 天前
08-05-热更新-完整热更新流程实战
unity3d·游戏开发