You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过代码获取Unity资源文件夹中Prefab的引用?

获取Unity资源文件夹中Prefab引用的实现方法

你可以通过以下几种方式实现代码获取Unity资源文件夹内Prefab的引用,同时可以封装成类似GetComponent<>()的便捷调用形式:

方法一:Resources文件夹加载(简单场景)

如果你的Prefab放在Resources文件夹或其子目录下,直接用Resources.Load<T>()即可:

// 加载Resources/Prefabs/Enemy.prefab
GameObject enemyPrefab = Resources.Load<GameObject>("Prefabs/Enemy");

注意:路径不需要加.prefab后缀,且Prefab必须在Resources目录下,打包后无法动态添加该目录下的资源。

方法二:Addressable Assets系统(推荐大型项目)

Addressable是Unity官方推荐的资源管理方案,不依赖固定文件夹,支持本地/远程加载:

  1. 先在Package Manager中安装Addressable Assets包
  2. 将Prefab标记为Addressable并设置地址
  3. 通过代码异步加载:
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;

// 异步加载指定地址的Prefab
AsyncOperationHandle<GameObject> loadHandle = Addressables.LoadAssetAsync<GameObject>("EnemyPrefab");
loadHandle.Completed += operation => {
    if (operation.Status == AsyncOperationStatus.Succeeded)
    {
        GameObject enemyPrefab = operation.Result;
        // 在这里使用Prefab
    }
};

方法三:编辑器模式下加载(仅开发阶段用)

如果是编辑器工具开发,可用AssetDatabase.LoadAssetAtPath<T>()直接通过项目路径加载:

#if UNITY_EDITOR
using UnityEditor;

// 路径为项目根目录相对路径,比如Assets/Prefabs/Enemy.prefab
GameObject enemyPrefab = AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Prefabs/Enemy.prefab");
#endif

该方法仅在编辑器环境生效,打包后无法使用。

封装成类似GetComponent<>()的便捷调用

你可以自己封装静态工具类,简化调用:

using UnityEngine;
using UnityEngine.AddressableAssets;
using System.Threading.Tasks;

public static class PrefabLoader
{
    // 同步加载Resources下的Prefab
    public static T Load<T>(string resourcePath) where T : Object
    {
        return Resources.Load<T>(resourcePath);
    }

    // 异步加载Addressable Prefab
    public static async Task<T> LoadAsync<T>(string addressableKey) where T : Object
    {
        var handle = Addressables.LoadAssetAsync<T>(addressableKey);
        var result = await handle.Task;
        Addressables.Release(handle);
        return result;
    }
}

调用示例:

// 同步加载
GameObject enemyPrefab = PrefabLoader.Load<GameObject>("Prefabs/Enemy");

// 异步加载(需在异步方法中调用)
GameObject enemyPrefab = await PrefabLoader.LoadAsync<GameObject>("EnemyPrefab");

内容的提问来源于stack exchange,提问作者Jakabi107

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 05:47:37