尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Unity 特殊文件夹完全指南:Editor、Resources、StreamingAssets 等 6 类目录的手游开发实战(Unity3DTraining 仓库视角)

发布时间:2026/9/25 11:58:08

资讯中心
01
ARTICLE

Unity 特殊文件夹完全指南:Editor、Resources、StreamingAssets 等 6 类目录的手游开发实战(Unity3DTraining 仓库视角)

Unity 特殊文件夹完全指南:Editor、Resources、StreamingAssets 等 6 类目录的手游开发实战(Unity3DTraining 仓库视角)
示例工程【免费下载链接】Unity3DTraining【Unity杂货铺】unity大杂烩~项目地址https://gitcode.com/gh_mirrors/un/Unity3DTraining点击查看免费下载本文基于仓库 Doc/Unity手游开发中所有特殊的文件夹.md 整理而成系统讲解 Unity 手游开发中六类特殊文件夹——Editor、Editor Default Resources、Gizmos、Plugins、Resources、StreamingAssets 的作用、打包行为、加载 API 与适用场景并结合本仓库 HotUpdate 下的 AssetBundle 工程源码展示 StreamingAssets 在资源热更新中的真实落地方式。读完本文你将能够正确规划 Unity 工程的目录结构判断哪类资源该放哪个特殊文件夹并掌握Resources.Load、AssetDatabase、Application.streamingAssetsPath等 API 的精确使用边界。1. Editor 文件夹只属于编辑器、绝不进包的代码与资源特性总结位置灵活Editor文件夹既可以放在工程根目录Assets/Editor也可以放在任意子目录如Assets/xxx/Editor、Assets/Scripts/Editor只要文件夹名字叫Editor即可多个Editor文件夹可以共存效果等同。不进发布包Editor文件夹下放置的所有资源文件与脚本文件都不会被打进最终的发布包.apk / .ipa / 可执行文件。仅编辑期可用其中的脚本只能在编辑器环境下运行不能作为运行时逻辑使用。典型用途把工具类脚本、编辑器扩展代码、编辑期使用的 DLL 放在这里。典型场景如技能编辑器——编辑器核心代码放Editor目录运行时只消费编辑器生成出来的配置/数据文件而不需要携带编辑器本体代码。本仓库中有大量此类实践。例如 HotUpdate/AssetBundleDemo/Assets/Scripts/Editor/BundleHelper.cs 正是放在Assets/Scripts/Editor子目录下的打包工具脚本它通过MenuItem暴露菜单调用BuildPipeline.BuildAssetBundles将资源输出到Application.streamingAssetsPathBundleHelper.cs#L25-L40。这套打包代码只服务于开发期运行时玩家根本不需要正是Editor文件夹存在的意义。从源码结构看仓库中Assets/Editor一级目录的用法也一致例如 HotUpdate/AssetBundleFramework/Assets/Editor/BuildeAssets.cs 同样是纯编辑期脚本。凡此类目录中的代码都不会进入最终包体。2. Editor Default Resources编辑器的默认资源仓库注意这个文件夹的名字中间是有空格的Editor Default Resources且必须放在 Project 视图的根目录下即Assets/Editor Default Resources不能放在任意子目录。特性总结存放编辑器用到的图片、文本等资源与Editor文件夹一样不会被打进最终发布包仅用于开发期可以通过EditorGUIUtility.Load直接读取其中的资源无需关心具体路径TextAsset text EditorGUIUtility.Load(test.txt) as TextAsset; Debug.Log(text.text);也就是说编辑器扩展中常用的图标、模板文本等散碎资源统一放进Editor Default Resources后用EditorGUIUtility.Load按文件名即可取到。它与Editor文件夹的分工是Editor放代码Editor Default Resources放编辑器运行时需要的原始资源。3. GizmosScene 视图里的可视化辅助图标Gizmos文件夹用于存放 Scene 视图中绘制的辅助图标所用图片。核心用法一Gizmos.DrawIcon绘制坐标图标void OnDrawGizmos() { Gizmos.DrawIcon(transform.position, 0.png, true); }第一个参数是Vector3坐标即图标要显示的 world 位置第二个参数是图片名图片必须放在Gizmos文件夹下第三个参数true表示允许缩放。核心用法二Inspector 直接给单个对象设置图标如果只想把图标挂在某个游戏对象上无需写代码直接在 Inspector 中设置即可核心用法三OnDrawGizmos()的机制与典型场景只要脚本继承MonoBehaviour在编辑模式下OnDrawGizmos()会每帧执行发布后的游戏运行时不会执行它只能用于在 Scene 视图中绘制辅助物件典型场景做摄像机轨迹预览用Gizmos.DrawLine和Gizmos.DrawFrustum在 Scene 视图中画出轨迹线与视锥方便美术和策划直观地调参而这些辅助线完全不影响运行时表现。4. Plugins原生 SDK 与第三方库的安置处做手机游戏时Android 或 iOS 接入 SDK 的依赖库文件——.soAndroid 原生库、.jarAndroid Java 库、.aiOS 静态库等——放在Plugins文件夹下打包时 Unity 会自动把这些文件打进安装包并按照对应平台目录如Plugins/Android、Plugins/iOS正确归档。这是接入渠道 SDK、广告 SDK、统计 SDK 的标准目录约定原生代码不进托管层但必须随包发布Plugins正是 Unity 约定的原生库随包入口。5. Resources随包打进的运行时资源特性总结位置灵活Resources文件夹可以放在根目录也可以放在子目录如/xxx/xxx/Resources多个Resources文件夹可以共存。必进包体Resources下的资源不管你是否使用都会被打进 .apk 或 .ipa因此它是一把双刃剑——用起来方便但容易让包体膨胀。三类加载 API 的边界务必分清API使用时机真机可用路径要求Resources.Load()编辑时与运行时均可是相对于Resources文件夹的路径Resources.LoadAssetAtPath()编辑时 / 编辑器运行时否Assets/xx/xx.xxx须带文件后缀名AssetDatabase.LoadAssetAtPath()仅编辑时否Assets/xx/xx.xxx须带文件后缀名原文档中写作Resource.Load实为Resources.Load。实践建议开发期PC 上尽量使用Resources.Load()或Resources.LoadAssetAtPath()方便快捷如果手机上选择一部分资源打进 AssetBundle一部分资源用Resources.Load()的混合方案那么在自动化打包时可以在打包前用AssetDatabase.MoveAsset()把已经打成 AssetBundle 的原始文件从Resources文件夹下移动出去再打包这样打出的运行包就不会包含多余文件打包完成后再把移动出去的文件移回原位。这一招能在保留Resources便利性的同时避免重复资源进包。6. StreamingAssets不压缩、只读的随包目录与热更新基石特性总结StreamingAssets 下的资源会全部打包进 .apk / .ipa与Resources的区别是Resources会压缩文件而 StreamingAssets 不压缩、原封不动地打包进去它是一个只读目录程序运行时只能读、不能写各平台路径不同统一用Application.streamingAssetsPath获取Unity 会根据当前平台自动返回对应路径。各平台路径对照常见形态平台StreamingAssets 实际路径Windows / macOS 编辑器项目目录/Assets/StreamingAssetsAndroidjar:file://.../xxx.apk!/assets压缩包内 assetsiOS应用包内的Data/Raw目录热更新标准做法原文核心流程将一部分初始 AssetBundle放在StreamingAssets目录下随安装包发布运行时把这些初始 AssetBundle 拷贝到Application.persistentDataPath目录下当有 AssetBundle 更新时从服务器下载新包覆盖persistentDataPath下对应的旧文件后续加载优先从persistentDataPath取最新版本StreamingAssets仅作为首次安装的种子数据。两个关键认知Application.persistentDataPath是应用程序的沙盒目录打包之前这个目录是不存在的直到应用在手机上安装完毕才被系统创建由于 StreamingAssets 资源不压缩会比较占空间。例如应用本体装在手机上占 100M又在 StreamingAssets 放了 100M 的 AssetBundle那么安装后整体占用约为 200M——规划包体时要把它计入成本。7. 仓库源码佐证StreamingAssets 在热更新工程中的真实用法上述理论在本仓库的 HotUpdate 系列工程中有大量真实落地代码可直接对照阅读。7.1 路径常量的平台差异处理HotUpdate/AssetBundleDemo/Assets/Scripts/AssetBundleMgr.cs#L12-L19 定义了三条路径常量正是对StreamingAssets 各平台路径不同的工程化封装public static readonly string streamingAssetPath Application.streamingAssetsPath; public static readonly string persistentDataPath Application.persistentDataPath; public static readonly string wwwStreamingAssetPath #if UNITY_ANDROID Application.streamingAssetsPath; // Android 上 streamingAssetsPath 本身就是可被 WWW 识别的路径 #else file:// Application.streamingAssetsPath; // 其他平台需要手动补 file:// 前缀 #endif可见即便在非 Android 平台直接拿Application.streamingAssetsPath拼 WWW 地址也需要补协议头这就是文档所说各平台路径不同、务必用统一 API 获取的实战含义。7.2 从 StreamingAssets 与 persistentDataPath 双向加载同一文件 AssetBundleMgr.cs#L67-L100 分别提供LoadFromStreamingAssetPath从随包目录加载同步LoadFromPersistantDataPath从沙盒目录加载同步以及对应的两个异步版本LoadAssetBundleAsync(Path.Combine(...))。这正好对应上文初始 bundle 放 StreamingAssets更新后覆盖 persistentDataPath的双目录设计。7.3 打包输出直接指向 StreamingAssetsHotUpdate/AssetBundleDemo/Assets/Scripts/Editor/BundleHelper.cs#L25 中abOutputPath Application.streamingAssetsPath即打包脚本把 AssetBundle 直接输出到 StreamingAssets 目录运行时再从这里读取初始资源。7.4 Manifest 加载与依赖管理的固定写法HotUpdate/AssetBundleFramework/Assets/Scripts/Manager/BundleManager.cs#L27-L28 将local_Path设为Application.streamingAssetsPath、deposit_DownFilePath设为persistentDataPath下的下载目录BundleManager.cs#L63-L76 则展示了从StreamingAssets加载StreamingAssets主 Manifest 的 bundle 名并解析AssetBundleManifest、再递归加载依赖的完整链路——这是初始 AssetBundle 放在 StreamingAssets这一策略的标准读法。仓库中 HotUpdate/AssetBundleDemo/Assets/StreamingAssets/ 目录下真实存放着main、start、uiloginpanel等 bundle 及对应的.manifest文件可以直接打开验证目录结构与打包产物形态。8. 结语一张表记住六类特殊文件夹文件夹位置要求是否进发布包关键 API / 特性Editor根目录或任意子目录否仅编辑器代码 / 工具脚本 / 编辑期 DLLEditor Default Resources仅 Project 根目录注意空格否EditorGUIUtility.LoadGizmos根目录下约定位置否仅编辑期图标Gizmos.DrawIcon、OnDrawGizmos、Inspector Select IconPlugins按平台分子目录是原生库随包.so/.jar/.aResources根目录或任意子目录是无论用不用Resources.Load运行时Resources.LoadAssetAtPath/AssetDatabase.LoadAssetAtPath仅编辑期打包前可用AssetDatabase.MoveAsset移出已打 bundle 的源文件StreamingAssets根目录是不压缩原样打包只读Application.streamingAssetsPath与persistentDataPath配合做资源热更新在 Doc/Unity手游开发中所有特殊的文件夹.md 原文基础上本文结合仓库 HotUpdate 下的真实 AssetBundle 工程补全了路径平台差异、加载 API 边界、打包输出与 Manifest 依赖管理的源码级细节。规划包体与资源热更架构时把这六类文件夹的边界吃透可以避免Resources 塞满导致包体膨胀Editor 代码误进包StreamingAssets 路径写死导致平台兼容崩溃等经典坑。赞分享示例工程【免费下载链接】Unity3DTraining【Unity杂货铺】unity大杂烩~项目地址https://gitcode.com/gh_mirrors/un/Unity3DTraining点击查看免费下载相关推荐AssetRipper Unity资源提取实战指南三步把游戏模型、贴图与音频导入自己的工程AssetRipper Unity资源提取实战指南三步把游戏模型、贴图与音频导入自己的工程 AssetRipper 是一款开源的 Unity 资源提取工具它开发工具逆向工程游戏开发Unity3DTraining项目深度解析Unity游戏开发的百科全书Unity3DTraining项目深度解析Unity游戏开发的百科全书 Unity3DTraining项目是一个综合性的Unity游戏开发知识库采用模块化架示例工程Unity 编辑器拓展实战指南基于 Unity3DTraining 仓库的窗口管理、节点编辑器与资源管线开发Unity 编辑器拓展实战指南基于 Unity3DTraining 仓库的窗口管理、节点编辑器与资源管线开发 本文以 Unity3DTraining 仓库 U示例工程上一篇PDF补丁丁使用指南如何免费编辑书签、合并拆分PDF文档下一篇Apex Legends压枪宏终极指南如何轻松实现零后坐力射击创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。