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()
相关推荐
WarPigs1 天前
Unity对象不应该使用null传播的问题
unity
每日出拳老爷子2 天前
【VR】【Unity】抓走转放系列21|一天搭完门和抽屉工具槽:小场景按这个次序拼装
unity·vr·驱动·排错·snap zone
淡海水3 天前
02-02-原理篇-分代GC
算法·unity·c#·游戏引擎·.net·gc
小贺儿开发3 天前
Unity 文物新生 会讲故事的文物展墙
人工智能·科技·unity·ai·视频·互动·演示
淡海水3 天前
02-03-原理篇-大对象堆
unity·c#·游戏引擎·.net·gc
WarPigs4 天前
Unity在Create菜单添加创建自定义脚本模板选项
unity
郝学胜-神的一滴4 天前
C++ Templates 01:拨开迷雾,读懂C++模板经典著作
开发语言·c++·程序人生·游戏·游戏引擎·软件构建
淡海水4 天前
02-01-原理篇-Mark-Sweep与变种算法
算法·unity·c#·游戏引擎·.net·gc
babywang04 天前
Unity笔记--塔防游戏中的ECS架构:从原理到实战的全面解析
unity·ecs架构
babywang05 天前
Unity笔记--AssetBundle详解
unity·游戏引擎