Unity资源管理——基础知识整理

部分参考自:
Unity - Manual: Unity User Manual 2021.3 (LTS)
UWA | 致力于游戏VR和AR应用提供项目研发解决方案 | 简单优化、优化简单 | 侑虎科技

一、Unity中常见的资源类型

1、原始资源文件(从外部创建并导入Unity,每一个类型都对应一个AssetImporter):

    Texture、Model、AudioClip、VideoClip、TextAsset、Font、其他。

2、代码文件:

    C#脚本文件、代码库文件、shader文件 等。导入时Unity会进行一次编译 

3、序列化文件(可在Unity中创建、编辑,能够被Unity运行时反序列化的文件)

    Sprite、SpriteAtlas、Prefab、Scene、Script、Shader、Materrial、AnimationClip、RenderTexture、CustomRenderTexture、AudioMixer、CustomFont、GUISkin、PhysicMaterial、ComputeShader、AnimatorController、AnimatorOverrideController、AvatarMask、Brush、Cubemap、LightmapParameters、Timeline、Signal、TerrainLayer、AssemblyDefinition、AssemblyDefinitionReference、Asset(ScriptableObject)文件、其他。

4、文本文档(Unity 识别为 TextAsset,无 ImportSetting)

    txt、xml、json、二进制文件、其他。

5、非序列化文件(Unity无法识别的文件,如文件夹)

6、Meta文件

*可能会依赖其他资源的资源:

    Model、SpriteAtlas、Prefab、Scene、Materrial、CustomFont、GUISkin、AnimatorController、AnimatorOverrideController、AvatarMask、Brush、Cubemap、Timeline、TerrainLayer、其他。

二、特定资源文件夹

Unity会将许多文件夹名解释为一条指令,说明文件夹中的内容应该以一种特殊的方式处理。

1、Assets: Unity项目资源主文件夹。除了部分函数需要将Assets文件夹包含在资源路径名中(例如,AssetDatabase类中的某些函数), 其他大部分都不用。

2、Editor: 放在Editor文件夹中的脚本被视为Editor脚本而不是运行时脚本,这些脚本在开发期间向Editor添加功能,并在运行时的构建中不可用。
    可在Assets文件夹中的任何位置添加多个Editor文件夹。应将Editor脚本放在Editor文件夹内或其子文件夹内。

3、Editor Default Resources:Editor脚本可以通过 EditorGUIUtility.Load 函数按需加载资源文件,此函数将在 Editor Default Resources 文件夹中查找资源文件(也可放在Editor/Resources下)。
    只能有一个 Editor Default Resources 文件夹,且必须放在项目的根目录(直接位于Assets文件夹中)。资源可放在其子文件夹,加载时需拼上路径。

4、Gizmos:此文件夹允许将图形添加到Scene视图,以帮助可视化不可见的设计细节。Gizmos.DrawIcon 函数在场景中放置一个图标,作为特殊对象或位置标记。必须将图像放在Gizmos文件夹中,才能被DrawIcon函数找到。
    只能有一个Gizmos 文件夹,且必须放在项目的根目录(直接位于Assets文件夹中)。资源可放在其子文件夹,加载时需拼上路径。
    
5、Plugins:可为项目添加插件来扩展Unity的功能。插件通常是用C/C++编写的本地DLL。这些插件可以访问第三方代码库、系统调用和其他Unity内置功能。请始终将插件放在 名为 Plugins 的文件夹中,才能被Unity检测到。
    只能有一个Plugins 文件夹,且必须放在项目的根目录(直接位于Assets文件夹中)。

6、Resources: 可从脚本中按需加载资源。应将资源放在名为 Resources的文件夹中,使用 Resources.Load函数加载。
    可在Assets文件夹中的任何位置添加多个Resources文件夹。资源可放在其子文件夹,加载时需拼上路径。
    注意,如果Resources是Ediotr的子文件夹,则其中的资源可通过Editor脚本加载,但会从构建中剥离。

7、Standard Assets: 标准资源导入后的文件夹。
    只能有一个Standard Assets文件夹,且必须放在项目的根目录(直接位于Assets文件夹中)。资源可放在其子文件夹。

8、StreamingAssets: 希望资源以其原始格式作为单独的文件使用。例如文件系统访问视频文件。StreamingAssets中的文件可以按原样复制到目标计算机,然后就能从特定文件夹中访问该文件。
     只能有一个StreamingAssets文件夹,且必须放在项目的根目录(直接位于Assets文件夹中)。资源可放在其子文件夹,加载时需拼上路径。

9、隐藏的资源:为防止导入由操作系统或其他应用程序创建的特殊文件和临时文件,Unity会忽略Assets文件夹中的以下文件:隐藏的文件夹、以**.**开头的文件和文件夹、以**~**结尾的文件和文件夹、名为cvs的文件和文件夹、扩展名为.tmp的文件。

三、系统资源路径

1、Application.dataPath:包含游戏数据文件夹的路径(只读)。

    和平台相关:

    Unity Editor: <path to project folder>/Assets
    iOS: <path to player app bundle>/<AppName.app>/Data(只读文件夹,可使用Application.persistentDataPath保存)
    Android: 通常它会直接指向APK。但如果正在运行拆分的二进制构建,它将指向OBB(Opaque Binary Blob )
    Mac player: <path to player app bundle>/Contents
    Win/Linux player: <path to executablename_Data folder>(请注意,大多数Linux安装都区分大小写!)
    WebGL: 播放器数据文件目录的绝对url(不含实际的数据文件名)
    Windows Store Apps: 播放器数据文件目录的绝对url(只读文件夹,可使用Application.persistentDataPath保存)

2、Application.persistentDataPath:包含持久数据目录的路径(可读可写)。

    该值是一个目录路径,其中可以存储需要在运行之间保留的数据。在 iOS 和 Android 上发布时,persistentDataPath 将指向设备上的公共目录。每次更新应用程序时,不会擦除此位置中的文件。但用户可以直接删除这些文件。

    请注意,在构建应用程序时,将基于 Bundle ID 生成 GUID,并且此 GUID 将成为 persistentDataPath 的一部分。如果您在将来的版本中保留相同的 Bundle ID,那么应用程序将在每次更新时继续访问相同的位置。

    Windows Store Apps: 指向 %userprofile%\AppData\Local\Packages\<productname>\LocalState.
    iOS: 指向 /var/mobile/Containers/Data/Application/<guid>/Documents.
    Android: 通常指向 /storage/emulated/0/Android/data/<packagename>/files  (一些旧手机可能会指向SD卡上的位置), 可使用 android.content.Context.getExternalFilesDir 解析路径。

3、Application.streamingAssetsPath:StreamingAssets文件夹的路径(只读)。

    在运行时,Application.streamingAssetsPath 提供文件夹的路径。如果将资产添加到 StreamingAssets文件夹。构建的应用程序就可以在这个地址加载资产。

    在WebGL和Android平台上不能访问StreamingAssets文件夹。因为 WebGL上没有可用的文件访问;而Android使用一个压缩的 .apk 文件,文件会被包含在压缩在 .jar文件(其格式与标准的zip压缩文件基本相同)中。这些平台返回一个URL,可以使用UnityWebRequest类访问URL来获得资产。

    Windows/MacOS:  Application.dataPath + "/StreamingAssets".
    iOS: Application.dataPath + "/RAW".
    Android: "jar://file://" + Application.dataPath + "!/assets/".

    注意:位于 StreamingAssets 文件夹中的 .dll 文件不参与编译。

4、Application.temporaryCachePath:包含临时数据/缓存目录的路径(只读)。

    该值是可以存储临时数据的目录路径。

四、发布时会被打入包内的资源:

1、Assets下所有非编辑器脚本文件。

2、Assets下所有 参与构建的Scene文件(BuildSettings Scenes In Build 处设置)。

3、Assets下直接或间接被 “参与构建的Scene文件” 所依赖的文件。

4、Resources下的所有文件。

5、Assets下直接或间接被 “Resources下的文件” 所依赖的文件。

6、StreamingAssets下的所有文件(会被逐字拷入目标平台的特定文件夹)。

7、Assets下所有 参与构建的Shader文件(ProjectSetting Built-in Shader Setting处设置)。

8、Plugins下的对应平台下的文件。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NRatel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值