Skip to content

资源加载相关

unity-csharp-asset-loading-system

基础概念

一句话:在游戏运行时,用 C# 把 Prefab、图片、音频、配置、场景等资源加载进内存,使用它们,最后释放它们。

你先记住 4 个词:

  1. Asset:项目里的资源文件,比如 Enemy.prefabIcon.pngBGM.mp3
  2. Instance:运行时生成出来的对象,比如场景里的一个敌人。
  3. Key / Path:找到资源的名字或路径。
  4. Handle:异步加载返回的“凭证”,Addressables 里很重要,用完要释放。

最基础:Inspector 直接引用

固定资源优先用这个,新手最该先掌握。

c
using UnityEngine;

public class Spawner : MonoBehaviour
{
    [SerializeField] private GameObject enemyPrefab;

    public void Spawn()
    {
        Instantiate(enemyPrefab, transform.position, Quaternion.identity);
    }
}

这里 enemyPrefab 是资源引用,Instantiate 才是真的生成一个场景对象。

Resources.Load

适合原型、小项目、少量启动资源。资源必须放在 Resources 文件夹下。

c
using UnityEngine;

public class ResourceSpawn : MonoBehaviour
{
    void Start()
    {
        GameObject prefab = Resources.Load<GameObject>("Enemies/Slime");

        if (prefab == null)
        {
            Debug.LogError("资源没找到");
            return;
        }

        Instantiate(prefab);
    }
}

注意路径不要写扩展名: Assets/Resources/Enemies/Slime.prefab 代码里写:"Enemies/Slime"

Addressables

中大型项目更推荐它,适合远程资源、热更新、DLC、活动资源、皮肤、关卡包。

c
using System.Collections;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;

public class AddressableSpawn : MonoBehaviour
{
    private AsyncOperationHandle<GameObject> handle;

    IEnumerator Start()
    {
        handle = Addressables.LoadAssetAsync<GameObject>("Enemy/Slime");
        yield return handle;

        if (handle.Status == AsyncOperationStatus.Succeeded)
        {
            Instantiate(handle.Result);
        }
        else
        {
            Debug.LogError("加载失败");
        }
    }

    private void OnDestroy()
    {
        if (handle.IsValid())
        {
            Addressables.Release(handle);
        }
    }
}

最容易混的点

LoadAsset 只是拿到资源模板。 Instantiate 才是在场景里创建对象。 Destroy(obj) 只是销毁场景里的实例。 Addressables.Release(handle) 才是释放 Addressables 的资源引用。

学习顺序

先学 Inspector 引用 + Instantiate。 再学 Resources.Load。 再学 Resources.LoadAsync 和协程。 最后学 Addressables.LoadAssetAsyncInstantiateAsyncRelease、缓存管理。

参考链接Unity Resources 系统介绍Unity Resources.LoadUnity Resources.LoadAsyncUnity Addressables 加载资源Unity Addressables 异步句柄Unity Addressables 内存管理Unity SceneManager.LoadSceneAsync

文章评价

读完这篇,留下你的看法

暂无审核通过的评价。

登录账号后才能评价。

本站访客数0总站访问量0本页访问量0