01-01-认知篇-概念-YooAsset是什么

YooAsset 是什么?------ 认知篇开篇

系列定位 :帮你建立对 YooAsset 的完整认知 篇章 :01-认知篇 · 概念 阅读时间 :约 30 分钟 前置知识:无,零基础友好


一、引言

在 Unity 游戏开发中,资源管理始终是一个绕不开的核心课题。无论你是在开发一款 2D 休闲小游戏,还是打造一款 3D 大型 MMORPG,资源的打包、加载、更新和卸载都是决定项目成败的关键因素之一。

随着项目规模的不断扩大,原始的 Resources 文件夹模式早已无法满足需求,而 Unity 官方的 AssetBundle 系统虽然功能强大,却因其极高的使用复杂度和陡峭的学习曲线,让无数开发者苦不堪言。正是在这样的背景下,YooAsset 应运而生。

本章作为「Unity资源管理-YooAsset完全剖析」系列的开篇之作,旨在帮助读者建立对 YooAsset 的第一印象。我们将从以下几个维度展开:

  1. YooAsset 是什么? ------ 它的定义、定位和基本特征
  2. 它的核心价值是什么? ------ 为什么你需要关注它
  3. 它适合谁用? ------ 适用场景分析
  4. 它的核心能力有哪些? ------ 功能全景概览
  5. 它的版本演进历史 ------ 从 v1.x 到 v3.x 的发展轨迹
  6. 与其他方案的对比 ------ YooAsset 在整个 Unity 资源管理生态中的位置
  7. 如何快速上手 ------ 从安装到第一个可运行的示例

让我们开始这段探索之旅。


二、YooAsset 概述

2.1 什么是 YooAsset?

YooAsset 是一套由 tuyoogame(途游游戏)团队 开发并开源的 轻量级、高性能、跨平台 Unity 资源管理系统。它基于 MIT 开源协议发布,任何个人或团队都可以免费使用、修改和商用,无需支付任何授权费用。

从技术定位上来看,YooAsset 是对 Unity 原生 AssetBundle 系统的一层高级封装和深度优化 。它在 AB 包的基础上,提供了一套完整的资源全生命周期管理方案,涵盖了从资源打包 -> 依赖分析 -> 版本管理 -> 异步加载 -> 热更新 -> 内存释放的完整链路。

项目的出发点非常明确:Yoo 团队在多个商业游戏项目中发现,Unity 原生 AB 包的使用存在大量重复性工作------手动管理依赖关系、编写下载器、处理版本对比、处理加密解密等。而官方 Addressables 方案虽然自动化程度高,但存在性能开销大、自定义能力受限、小游戏适配差等问题。YooAsset 正是为了填补这些空白而诞生的。

核心数据一览

  • 支持 Unity 版本:Unity 2019.4 ~ 6000.x(LTS 全系列)
  • 支持平台:Windows、macOS、Linux、iOS、Android、WebGL、Switch、PS5、Xbox 等所有 Unity 支持平台,以及微信小游戏、抖音小游戏等特殊平台
  • 最新稳定版:v3.0.x(截至 2026 年中)
  • 开源协议:MIT(完全免费商用)
  • GitHub Star:3000+
  • 商业验证:已被数千款商业游戏验证,含多款百万 DAU 产品

2.2 核心功能一览

YooAsset 的功能覆盖了资源管理的所有关键环节,以下是它的核心功能清单:

功能模块 具体能力 解决的问题
资源打包 Package/Group/Collector 三级结构、增量打包、多种打包规则 告别手动 AB 包配置的繁琐和易错
资源加载 同步/异步加载、场景加载、子资源加载、原生文件加载 统一 API,无需关心底层 AB 包细节
依赖管理 自动依赖分析、共享资源提取、循环依赖检测 彻底解决资源冗余和依赖地狱
热更新 版本管理、差量更新、断点续传、灰度发布、版本回滚 开箱即用的热更新解决方案
文件系统 IFileSystem 抽象层、多种内置实现、可自定义扩展 完美适配各平台文件访问差异
加密解密 AES 加密、XOR 加密、自定义解密接口 保护资源安全,防止破解
调试工具 AssetBundle Debugger、运行时资源浏览器、构建报告 可视化调试,快速定位问题
运行模式 编辑器模拟、单机运行、联机运行、WebGL 运行、自定义运行 开发到上线无缝切换

三、核心价值

3.1 零侵入式设计

YooAsset 最核心的设计理念之一就是零侵入。这意味着:

不修改 Unity 编辑器源码:YooAsset 完全作为插件运行,不需要对 Unity 引擎本身做任何修改。这意味着你可以在不改变现有开发环境的情况下集成它。

不侵入项目现有代码结构:你不需要为了使用 YooAsset 而重构整个项目的代码架构。它通过静态 API 和可选的初始化方式,与现有代码和谐共存。

不依赖特定的项目架构:无论你使用的是 MVC、ECS、还是传统的 Script 挂载模式,YooAsset 都能无缝接入。

即插即用,集成成本极低:通过 UPM(Unity Package Manager)安装后,只需几行代码即可完成初始化。

csharp 复制代码
// YooAsset 的最小初始化代码
using YooAsset;

public class GameInitializer
{
    public async void Initialize()
    {
        // 1. 初始化 YooAsset 系统
        await YooAssets.InitializeAsync();

        // 2. 创建资源包
        var package = YooAssets.CreatePackage("DefaultPackage");

        // 3. 设置运行模式(这里以编辑器模拟模式为例)
        var initParameters = new EditorSimulateModeParameters();
        await package.InitializeAsync(initParameters);

        Debug.Log("YooAsset 初始化完成!");
    }
}

零侵入设计带来的实际好处:

  • 升级风险低:YooAsset 版本升级时,你的业务代码几乎不需要修改
  • 迁移成本低:从原生 AB 包或 Addressables 迁移到 YooAsset 时,可以分模块逐步替换
  • 团队适应快:团队成员不需要学习全新的架构范式

3.2 统一的资源管理体验

在传统的 AB 包开发模式中,你需要面对多套不同的 API:

csharp 复制代码
// 原生 AB 包的多种加载方式
var ab = AssetBundle.LoadFromFile(path);                    // 本地加载
var www = WWW.LoadFromCacheOrDownload(url, version);        // 网络下载(旧版)
var request = UnityWebRequestAssetBundle.GetAssetBundle(url);// 网络下载(新版)
var asset = ab.LoadAsset<GameObject>("myPrefab");            // 资源加载

YooAsset 将这一切统一为一套简洁的 API

csharp 复制代码
// YooAsset 的统一加载 API ------ 无论资源在本地还是远程
AssetHandle handle = package.LoadAssetAsync<GameObject>("Assets/GameRes/Prefabs/MyPrefab.prefab");
await handle.Task;
GameObject go = handle.InstantiateSync();
// 使用完毕后释放
handle.Release();

无论资源是打在了安装包里、存储在本地缓存中、还是需要从远程服务器下载,YooAsset 都会自动处理这些差异。开发者只需要关注加载什么资源 ,而不需要关心资源从哪里来

3.3 强大的打包与加载能力

YooAsset 的打包系统提供了一套精细化的控制机制:

三级配置结构

  • Package(资源包) :最高层级,对应一个独立的功能模块或 DLC。例如:BasePackage(基础资源)、Chapter1Package(第一章关卡资源)
  • Group(资源组) :次层级,对应一类资源的逻辑分组。例如:UIResourcesCharacterTexturesAudioEffects
  • Collector(收集器):最底层,定义了资源的收集路径和打包规则

灵活的打包规则

  • PackSeparately:每个文件单独打包(粒度最细)
  • PackDirectory:按文件夹打包
  • PackCollector:按收集器路径打包
  • PackGroup:按分组打包
  • 支持自定义打包规则

加载能力

  • 支持协程、委托、Task 三种异步加载方式
  • 支持同步加载(在非主线程或特定场景下使用)
  • 支持边玩边下载:加载资源时如果依赖包不存在,自动触发下载
  • 支持场景异步加载:可以加载、卸载、叠加场景

3.4 完善的跨平台支持

Unity 本身是一个跨平台引擎,但不同平台的文件系统和网络能力差异巨大:

平台 文件访问方式 特殊限制 YooAsset 适配方案
Windows/macOS 本地文件系统 StreamingAssetsFileSystem
iOS 沙盒文件系统 无法访问安装包内文件 PersistentFileSystem
Android APK 内部 + 外部存储 分区存储限制 多文件系统组合
WebGL IndexedDB 50MB-500MB 存储限制 WebFileSystem
微信小游戏 虚拟文件系统 首包 4MB+4MB 限制 虚拟文件系统适配
抖音小游戏 虚拟文件系统 类似微信 虚拟文件系统适配

YooAsset 通过 IFileSystem 抽象层 完美解决了跨平台文件访问差异问题,开发者可以通过统一的接口读写文件,而 YooAsset 在底层根据当前平台选择合适的实现。


四、适用场景

4.1 中大型游戏项目

如果你的项目有以下特征,YooAsset 是理想选择:

  • 资源总量超过 500MB:需要精细的资源分包和按需加载策略
  • 需要热更新:频繁更新内容,修复线上问题
  • 有多版本管理需求:需要同时维护多个线上版本,支持灰度发布

4.2 小游戏项目

微信小游戏和抖音小游戏有严格的首包大小限制(微信小游戏首包限制通常为 4MB+4MB),这使得小游戏项目的资源管理变得极具挑战性。YooAsset 提供了:

  • 零资源安装包方案:完全不包含任何游戏资源的空壳包,玩家首次启动时自行下载
  • 首包资源裁剪:只打包最关键的资源,其余在线下载
  • 渐进式加载:玩家边玩边下载后续关卡资源
  • 后台下载系统:在游戏运行时静默下载资源,不阻塞玩家操作

4.3 热更新项目

对于需要频繁发布新内容或修复线上问题的项目,YooAsset 提供了完整的热更新解决方案:

  • 差量更新:只下载变化的文件,节省用户流量
  • 断点续传:下载中断后自动恢复,无需重新下载
  • 版本回滚:新版本出现问题时可快速回滚到旧版本
  • 灰度发布:先向小部分用户推送更新,验证没问题后再全量发布

4.4 多平台项目

需要同时发布到多个平台的游戏(如同时发布 iOS、Android、WebGL 版本),YooAsset 的 IFileSystem 抽象层让跨平台资源管理变得简单:

  • 同一套资源配置,自动适配不同平台
  • 平台相关的资源变体管理(如高清资源包 for PC,标清资源包 for Mobile)
  • 统一的 API 接口,相同的业务代码

五、核心能力详解

5.1 资源打包

YooAsset 的资源打包系统是其最强大的核心能力之一。它构建了一套完整的资源组织、分析和构建体系。

资源组织层次

YooAsset 通过 Package -> Group -> Collector 三级结构来组织资源,这种设计灵感来源于现代软件工程的模块化思想:

  • Package(资源包) :是一个独立的功能单元。一个大型项目可以有多个 Package,比如一个 MMORPG 可能有 BasePackage(基础资源)、TownScenePackage(主城场景)、DungeonPackage(副本资源)等。每个 Package 拥有独立的配置、版本号和生命周期。
  • Group(资源组) :是 Package 内部的资源分类。例如,BasePackage 内可以有 UISpritesCommonPrefabsAudioClips 等 Group。Group 可以设置激活规则(Active Rule),控制是否参与打包,这在调试和模块化开发中非常有用。
  • Collector(收集器):是 Group 下的资源收集单元。它定义了从哪个路径收集资源、使用什么打包规则、如何使用寻址规则。

打包规则详解

YooAsset 提供了多种内置的打包规则,开发者可以根据资源的使用频率和更新粒度灵活选择:

rust 复制代码
PackSeparately  ->  每个资源单独打包
PackDirectory   ->  按文件夹打包
PackCollector   ->  按收集器路径打包
PackGroup       ->  按分组打包
  • PackSeparately:适用场景是需要独立更新的资源,如每个角色模型单独更新。例如:Assets/Characters/Knight.prefab -> knight.bundleAssets/Characters/Mage.prefab -> mage.bundle
  • PackDirectory:适用场景是文件夹内资源通常一起更新,如某个关卡的资源。例如:Assets/Levels/Level1/* -> level1.bundle
  • PackCollector:将收集路径下的所有资源打成一个包。例如:Assets/UI/* -> ui.bundle
  • PackGroup:将 Group 内所有资源打成一个包

增量打包机制

YooAsset 的构建系统支持增量打包,这意味着:

  1. 首次构建时,所有资源都会被完整打包
  2. 后续构建时,只有发生变化的资源会重新打包
  3. 未变化的资源直接从缓存复用,大幅缩短构建时间

对于超大型项目(上百 GB 资源),YooAsset 还支持分布式构建,可以将不同模块分配给不同机器并行构建,然后通过版本合并机制整合到一起。

5.2 资源加载

YooAsset 提供了一套统一且丰富的资源加载 API,覆盖了所有常见的加载场景:

加载 API 列表

API 功能 同步/异步
LoadAssetAsync 加载单个资源对象 异步
LoadAssetSync 加载单个资源对象 同步
LoadSubAssetsAsync 加载子资源对象(如图集的 Sprite) 异步
LoadSubAssetsSync 加载子资源对象 同步
LoadAllAssetsAsync 加载资源包内所有资源 异步
LoadAllAssetsSync 加载资源包内所有资源 同步
LoadSceneAsync 异步加载场景 异步
LoadRawFileAsync 异步加载原生文件 异步
LoadRawFileSync 同步加载原生文件 同步

三种异步加载方式

YooAsset 支持三种主流的异步编程模式:

csharp 复制代码
// 方式一:委托回调
AssetHandle handle = package.LoadAssetAsync<GameObject>("Assets/GameRes/Prefabs/Player.prefab");
handle.Completed += (h) =>
{
    GameObject player = h.InstantiateSync();
};

// 方式二:协程
IEnumerator LoadCoroutine()
{
    AssetHandle handle = package.LoadAssetAsync<GameObject>("Assets/GameRes/Prefabs/Player.prefab");
    yield return handle;
    GameObject player = handle.InstantiateSync();
}

// 方式三:Task 异步(推荐)
async Task<GameObject> LoadPlayerAsync()
{
    AssetHandle handle = package.LoadAssetAsync<GameObject>("Assets/GameRes/Prefabs/Player.prefab");
    await handle.Task;
    return handle.InstantiateSync();
}

资源寻址方式

YooAsset 提供了灵活的寻址能力:

  • 全路径寻址 (默认):Assets/GameRes/Audio/bgMusic.mp3
  • 可寻址模式 :开启 Enable Addressable 后,可通过文件名或其他自定义规则寻址,如 bgMusic
  • GUID 寻址:通过资源的 GUID 加载
  • 标签寻址:通过 Asset Tags 批量加载资源

5.3 热更新

热更新是 YooAsset 的核心功能之一,它内置了一套完整的版本管理与下载体系。

热更新标准流程

rust 复制代码
启动游戏 -> 初始化 YooAsset -> 获取远程版本信息 -> 对比版本差异
 -> 下载差量资源 -> 安装更新 -> 加载资源进入游戏

版本管理系统

  • 每个 Package 拥有独立的版本号(PackageVersion)
  • 版本信息存储在 Manifest 文件中
  • 启动时自动对比本地与远程版本差异
  • 支持强制更新和非强制更新模式

差量更新实现: YooAsset 的差量更新基于文件级别的版本对比:

  1. 服务器端保存完整资源清单
  2. 客户端上传本地版本号
  3. 服务器计算差异文件列表
  4. 客户端只下载变更的文件

断点续传机制

  • 下载器会记录已下载的字节数
  • 下载中断后重新连接时跳过已完成的部分
  • 自动验证下载文件的完整性(CRC 校验)
  • 下载失败自动重试(可配置重试次数)
csharp 复制代码
// 热更新的完整代码示例
public async Task HotUpdateProcedure()
{
    // 1. 初始化
    var package = YooAssets.GetPackage("DefaultPackage");

    // 2. 获取版本信息
    var versionOperation = package.UpdatePackageVersionAsync();
    await versionOperation.Task;
    string remoteVersion = versionOperation.PackageVersion;

    // 3. 更新清单
    var manifestOperation = package.UpdatePackageManifestAsync(remoteVersion);
    await manifestOperation.Task;

    // 4. 创建下载器并开始下载
    var downloader = package.CreateResourceDownloader(5, 3); // 5并发,3次重试
    if (downloader.TotalDownloadCount > 0)
    {
        downloader.OnDownloadProgressCallback = (totalCount, currentCount, totalBytes, currentBytes) =>
        {
            float progress = (float)currentBytes / totalBytes * 100;
            Debug.Log($"下载进度: {progress:F1}% ({currentBytes}/{totalBytes} bytes)");
        };

        await downloader.BeginDownload();
    }

    Debug.Log("热更新完成!");
}

5.4 文件系统

YooAsset 的 IFileSystem 抽象层是其跨平台能力的基石。通过这个抽象层,YooAsset 能够在不同平台上使用最合适的文件访问策略。

内置文件系统实现

  • StreamingAssetsFileSystem:用于读写 StreamingAssets 目录下的文件(只读)
  • PersistentFileSystem:用于读写持久化数据目录下的文件(可读写)
  • WebFileSystem:用于 WebGL 平台的文件访问
  • RawFileFileSystem:用于原生文件(如视频、二进制数据)的管理

自定义文件系统扩展

如果你的项目需要接入一个特殊平台(如某个新兴的小游戏平台),或者需要使用特殊的存储方案(如云存储),你可以通过实现 IFileSystem 接口来自定义文件系统:

csharp 复制代码
public class MyCloudFileSystem : IFileSystem
{
    // 实现接口方法:文件读取、写入、删除、查询等
    public async Task<byte[]> ReadFileAsync(string filePath)
    {
        // 从云存储读取
    }
    public async Task WriteFileAsync(string filePath, byte[] data)
    {
        // 写入云存储
    }
    public async Task<bool> FileExistsAsync(string filePath)
    {
        // 查询文件是否存在
    }
    // ... 其他接口方法
}

5.5 调试工具

YooAsset 提供了一系列强大的调试工具,帮助开发者分析和优化资源管理:

AssetBundle Debugger(调试器)

  • 可视化展示所有已加载的 Bundle 列表
  • 查看 Bundle 之间的依赖关系图
  • 监控实时加载/卸载操作
  • 支持编辑器模式和真机远程调试

构建报告(AssetBundle Reporter)

  • 构建完成后自动生成详细报告
  • 包含资源包大小、冗余分析、依赖关系等信息
  • 支持按分类筛选和搜索

运行时资源浏览器

  • 在游戏运行时实时查看已加载的资源
  • 显示资源的引用计数
  • 显示内存占用情况
  • 支持手动强制卸载资源

六、版本演进

6.1 版本发展时间线

YooAsset 自发布以来,经历了三个主要版本阶段:

v1.x 时代(基础功能期)

  • 实现了基础的 AB 包封装和管理功能
  • 提供了基本的资源加载和卸载 API
  • 初步的热更新支持
  • 此时还比较粗糙,但已经展现了 YooAsset 的设计理念

v2.x 时代(架构重构期)

  • 重大的架构重构,引入了 Package/Group/Collector 三级结构
  • 推出了 IFileSystem 抽象层的概念
  • 完善了热更新系统,加入差量更新和断点续传
  • 编辑器工具链的全面升级
  • 社区反响良好,Star 数开始快速增长

v3.x 时代(当前版本)

  • 进一步强化了小游戏平台的支持(微信、抖音)
  • 优化了整体性能和内存管理
  • 增加了更多自定义扩展点
  • 支持分布式构建和 MOD 系统
  • API 更加成熟稳定

6.2 关键里程碑

里程碑 版本 意义
初始开源 v1.0 YooAsset 正式面向社区开源
三级结构引入 v2.0 资源组织架构的重大升级
小游戏适配 v2.3 开始支持微信小游戏
IFileSystem 抽象层 v2.5 跨平台能力的基石
SBP 管线支持 v2.8 支持可编程构建管线
分布式构建 v3.0 支持超大型项目的构建需求
MOD 系统支持 v3.1 支持玩家自制内容的分发

七、与其他方案的对比定位

7.1 与 Addressables 的定位差异

维度 YooAsset Addressables
自动化程度 适中,可控性好 高,黑盒程度高
性能开销 接近原生 AB 包 Provider 系统带来额外开销
热更新 原生完善支持 需要额外配置
小游戏适配 优秀 一般
自定义能力 强,多扩展点 受限
官方支持 社区开源 Unity 官方维护

7.2 与原生 AssetBundle 的对比

YooAsset 相比于原生 AB 包,最大的优势在于自动化安全性

  • 自动依赖分析:原生 AB 包需要手动维护依赖关系
  • 引用计数管理:原生 AB 包的 Unload 很容易出错
  • 统一加载 API:原生 AB 包有多种加载方式,难以统一管理
  • 热更新:原生 AB 包的热更新流程需要完全自己实现

7.3 与 CatAsset、XAsset 等的对比

方案 定位 社区活跃度 功能完整性
YooAsset 全功能资源管理 高(3000+ Star) 全面
CatAsset 小游戏优化方案 专注于小游戏
XAsset 轻量级方案 基础功能
GameFramework 资源模块 框架内资源管理 与 GF 深度绑定

八、快速开始示例

8.1 安装方式

方式一:UPM 安装(推荐) 在 Unity 的 Package Manager 中,选择 "Add package from git URL",输入:

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

方式二:OpenUPM 安装

csharp 复制代码
openupm add com.tuyoogame.yooasset

方式三:手动安装 从 GitHub Releases 页面下载最新版本的 .unitypackage 或 ZIP 文件,手动导入项目。

8.2 最小使用示例

以下是一个完整的 YooAsset 使用示例,涵盖了从初始化到资源加载和释放的全流程:

csharp 复制代码
using UnityEngine;
using YooAsset;
using System.Threading.Tasks;

public class YooAssetDemo : MonoBehaviour
{
    private ResourcePackage _package;

    async void Start()
    {
        // 1. 初始化 YooAsset
        await YooAssets.InitializeAsync();

        // 2. 创建资源包实例
        _package = YooAssets.CreatePackage("DefaultPackage");

        // 3. 初始化资源包(以编辑器模拟模式为例)
        var initParams = new EditorSimulateModeParameters();
        var initOp = _package.InitializeAsync(initParams);
        await initOp.Task;

        if (initOp.Status == EOperationStatus.Succeed)
        {
            Debug.Log("YooAsset 初始化成功!");
            await LoadAndUseAsset();
        }
    }

    async Task LoadAndUseAsset()
    {
        // 4. 加载资源
        AssetHandle handle = _package.LoadAssetAsync<GameObject>("Assets/GameRes/Prefabs/Cube.prefab");
        await handle.Task;

        // 5. 实例化资源
        GameObject cube = handle.InstantiateSync();
        cube.transform.position = Vector3.zero;

        // 6. 使用完毕后释放资源
        // handle.Release();
    }
}

8.3 第一个 YooAsset 项目

搭建一个完整的 YooAsset Demo 只需要以下几步:

  1. 安装 YooAsset 到 Unity 项目中
  2. 打开资源配置窗口:菜单栏 -> YooAsset -> AssetBundle Collector
  3. 创建 Package:命名为 "DemoPackage"
  4. 创建 Group:命名为 "DemoGroup"
  5. 添加 Collector:指向你的资源文件夹(如 Assets/Demo/Textures)
  6. 运行游戏:选择编辑器模拟模式,即可直接加载和使用资源

整个过程不需要任何打包操作,YooAsset 的编辑器模拟模式会直接用项目中的原始资源文件来模拟加载过程,大幅缩短了开发迭代周期。


九、总结

本章我们从概念层面全面了解了 YooAsset ------ 它是一套什么工具?解决了什么问题?它的核心价值在哪里?适合什么场景?以及如何快速上手。

要点回顾

  • YooAsset 是一套基于 Unity AssetBundle 封装的跨平台资源管理框架,MIT 开源,完全免费商用
  • 它的核心设计理念是零侵入、分层架构、性能优先和开发者友好
  • 提供了资源打包、加载、热更新、文件系统、调试工具等全流程能力
  • 经历了 v1.x -> v2.x -> v3.x 的版本演进,目前已非常成熟稳定
  • 相比 Addressables,它更轻量、更可控、热更新和小游戏适配更好
  • 相比原生 AB 包,它自动化程度更高、出错率更低

在下一章中,我们将回顾 Unity 资源管理的发展历程,从 Resources 文件夹到 AssetBundle,再到 Addressables 和社区方案,了解 YooAsset 诞生的历史背景和演进脉络。


下一篇Unity 资源管理发展史

相关推荐
SmalBox1 天前
YooAsset-全篇导览
unity3d·游戏开发
长脖鹿Johnny1 天前
游戏输入系统框架设计(三):网络输入权威与可验证性
网络·游戏·游戏开发·架构设计·输入系统·网络同步
2601_962078192 天前
python怎么用
游戏开发·web开发·数据科学·自动化脚本·网页爬取
_zhourui_h_2 天前
EasyECS:一个 foreach,让 IL2CPP 性能直接掉了一个数量级
unity3d
SmalBox2 天前
【交互着色效果】Unity实现-交互式雪地效果
unity3d·游戏开发·图形学
fujisheng6612 天前
Unity MVVM 最小实现:从手写事件到可测试 BindingContext
unity3d·mvvm
EzSharer3 天前
为什么你开发的 Unity 游戏越玩越烫?(系列 · 第 1 篇)
unity3d
陈言必行3 天前
Unity开发实战技巧:脚本优化与性能提升
unity3d
SmalBox3 天前
【高级着色器】Unity实现-卡通风格水着色器
unity3d·游戏开发·图形学