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()
相关推荐
RReality13 小时前
【Unity UGUI】Toggle / ToggleGroup 与 Dropdown
ui·unity·游戏引擎·图形渲染·材质
雪儿waii14 小时前
Unity 中的 InvokeRepeating 详解
unity·游戏引擎
mxwin14 小时前
Unity Shader 程序化生成:Shader 中的数学宇宙
unity·游戏引擎
雪儿waii15 小时前
Unity 中的 Quaternion(四元数)详解
unity·游戏引擎
RReality15 小时前
【Unity UGUI】ScrollRect 与 Scrollbar 深度用法
unity·游戏引擎
人邮异步社区15 小时前
如何自学游戏引擎的开发?
unity·程序员·游戏引擎
郝学胜-神的一滴17 小时前
[简化版 Games 101] 计算机图形学 05:二维变换下
c++·unity·图形渲染·three.js·opengl·unreal
mxwin1 天前
Unity URP 热更新兼容性:Shader 在 IL2CPP 打包下的注意事项
unity·游戏引擎
mxwin1 天前
Unity shader中TransformWorldToShadowCoord原理解析
unity·游戏引擎·shader