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()
相关推荐
元气少女小圆丶11 小时前
SenseGlove Nova 2+Unity开发笔记2
笔记·unity·游戏引擎
Oiiouui14 小时前
Godot(4.x): 游戏管理器: Godot 内注入数据处理与总接口实现
游戏·游戏引擎·godot
想不明白的过度思考者16 小时前
Unity学习笔记——虚拟摇杆实现笔记(事件触发器的使用、UGUI 坐标转换)
笔记·学习·unity
魔士于安16 小时前
unity volumefog带各种demo第一人称 wsad 穿墙控制
游戏·unity·游戏引擎·贴图·模型
魔士于安19 小时前
红色文化馆技术文档
前端·unity·游戏引擎·贴图·模型
LONGZETECH19 小时前
Unity 3D工业级教育软件实战:200+无人机装调任务的碰撞检测与交互落地
3d·unity·架构·游戏引擎·无人机·交互·cocos2d
淡海水19 小时前
08-认知篇-对比-injectfix深度解析
unity·c#·热更新·clr·hybrid·injectfix
迪普阳光开朗很健康19 小时前
BepInEx 插件开发文档中文翻译 - 项目分享
unity·bepinex
元气少女小圆丶1 天前
SenseGlove Nova 2+Unity开发笔记1
笔记·学习·unity
mxwin1 天前
Unity URP下新技术MSSPT 取代SSR和光线追踪
unity·游戏引擎·shader