Unity 中的 Resources 详解

Resources 是 Unity 内置的资源加载系统,核心作用:不用拖面板,代码里动态加载图片、预设体、音频、文本等资源,是 Unity 最常用的动态资源方案。

一、核心规则(必须先看)

复制代码
1. 文件夹名字必须叫 Resources
   项目里新建文件夹,命名严格为 Resources(大小写敏感)
   可以多个 Resources 文件夹,Unity 会自动合并查找
2.资源放在里面,才能被代码加载
3.打包后 Resources 里的资源会全部打包,不管有没有用到
4.加载路径写法
  不用写后缀(.png/.prefab 都删掉)
  子文件夹直接写路径:"UI/ButtonIcon"

二、常用 API

  1. 加载单个资源(最常用)
cpp 复制代码
T 资源变量 = Resources.Load<T>("资源路径");
复制代码
T = 资源类型(GameObject, Sprite, AudioClip, Texture2D 等)
  1. 加载文件夹下所有资源
cpp 复制代码
Object[] 数组 = Resources.LoadAll("文件夹路径");
  1. 卸载未使用的资源(优化内存)
cpp 复制代码
Resources.UnloadUnusedAssets();

三、超简单示例(直接复制用)

示例 1:加载预设体并生成

cpp 复制代码
using UnityEngine;

public class LoadTest : MonoBehaviour
{
    void Start()
    {
        // 1. 从 Resources 加载预设体
        GameObject enemyPrefab = Resources.Load<GameObject>("Enemy");
        
        // 2. 生成物体
        Instantiate(enemyPrefab, Vector3.zero, Quaternion.identity);
    }
}

资源结构:

cpp 复制代码
Assets/Resources/Enemy.prefab

示例 2:加载图片(Sprite)

cpp 复制代码
// 路径:Resources/UI/Icon.png
Sprite sprite = Resources.Load<Sprite>("UI/Icon");
GetComponent<Image>().sprite = sprite;

示例 3:加载音频

cpp 复制代码
AudioClip clip = Resources.Load<AudioClip>("Audio/BGM");
GetComponent<AudioSource>().PlayOneShot(clip);

四、同步 vs 异步加载

  1. 同步加载(简单,会卡一下)
cpp 复制代码
GameObject obj = Resources.Load<GameObject>("Player");
  1. 异步加载(不卡顿,推荐大资源
cpp 复制代码
void Start()
{
    StartCoroutine(LoadAsync());
}

IEnumerator LoadAsync()
{
    ResourceRequest request = Resources.LoadAsync<GameObject>("Player");
    
    // 等待加载完成
    yield return request;
    
    // 加载完成后使用
    GameObject obj = request.asset as GameObject;
    Instantiate(obj);
}

五、重要注意事项(避坑)

复制代码
路径不要带后缀
  ❌ 错误:"Icon.png"
  ✅ 正确:"Icon"
名字写错会返回 null
   控制台报 MissingResourceException
打包后无法修改 Resources 资源
   想热更资源用 Addressables 或 AssetBundle
尽量不要大量使用 Resources
会增大包体、延长启动时间(所有资源要索引)
卸载技巧
    切换场景后 Unity 会自动清 Resources 内存
    想手动清:Resources.UnloadUnusedAssets()
相关推荐
淡海水12 小时前
07-02-源码-.NET Core GC分配路径
算法·unity·c#·.netcore·gc·1024程序员节
FFFFujige14 小时前
【Unity】基于Dots + Luban的Buff模块
unity·游戏引擎
紫龙大侠15 小时前
Unity许可证文件(激活成功后)默认保存位置
unity
Msir_Modern19 小时前
Noita 元胞沙盒笔记
算法·unity·c#·游戏引擎·元胞自动机
Oiiouui1 天前
Godot-GridGame架构逻辑层与实体/物品层篇
架构·游戏引擎·godot
天天进步20151 天前
Unity 2020.3 反复提示安全模式:一次 CS0009 与 DLL 文件占用的排查记录
unity·1024程序员节
true...1 天前
虚幻还原默认视角
游戏引擎·虚幻
淡海水1 天前
07-04-源码-.NET Core GC清扫与压缩
unity·架构·c#·.netcore·gc·1024程序员节
小贺儿开发2 天前
《长征 · 征途》Unity 三维互动沙盘
科技·3d·unity·1024程序员节·地形·互动·沙盘
解决小子2 天前
【虚幻引擎】【C++】【GAS框架】构建角色基类、属性集、数值钳制
c++·笔记·游戏引擎·虚幻·gas·能力系统