Unity加载资源–Resources
0. Unity中的Resources.Load
方法使用总结
在Unity中我们最开始使用资源是通过public公开变量的方式在外部进行赋值或者拖拽的方式指定预制体,图片,音频等资源.
但是这样很麻烦,一不小心就忽略空指针异常, 如果项目更新,就需要重新拖拽. 如果是测试的话,使用拖拽的方式还是可以的. 如果是项目的话还是要通过代码的方式来加载资源.
关于小型项目的话就可以使用Unity自带的Resource相关的函数来加载资源. 前提是我们得知道或者要加载的资源应该存放在哪个文件中.
Unity加载资源的文件夹需要自己创建名字为Resources. 名字不能错, 可以有多个Resources文件夹.Resouces文件夹下可以有多个文件夹, 也就是可以按照类型或者自己的喜好来分类存储,比如:Model 模型, Texture 贴图 Audio 音频等具有含义的文件夹.
使用Resources.Load相关的API进行加载资源.
Resources.Load
是Unity中一种简单且常用的资源加载方式,主要适用于小型项目或快速原型制作。以下是关于Resources.Load
加载资源的内容总结:
1. 基本用法
Resources.Load
方法可以从项目的Resources文件夹中加载资源。Resources.Load<T>
方法是加载指定类型的资源- 调用时需要指定资源的路径和名称,路径可以是子文件夹。
2. 加载不同类型的资源
- 预制体:如
Resources.Load("Cube")
,加载名为“Cube”的预制体。 - 音频剪辑:如
Resources.Load("Music/BGM")
,加载名为“BGM”的音乐文件,不用填写后缀名 - 文本文件:通过泛型方法加载,如
Resources.Load<TextAsset>("Documents/ReadMe")
,加载“ReadMe”文本文件。 - 图片:如
Resources.Load<Texture>("Pictures/Picture")
,加载名为“Picture”的图片。
3. 加载机制
Resources.Load
在运行时加载资源,资源会被打包进游戏文件中。- 加载的资源不是实例化的,需要使用
Instantiate
方法来实例化预制体。
4. 注意事项
- Resources文件夹中的资源在构建游戏时会被直接打包,不适用于大型或频繁更新的资源。
- 使用
Resources.Load
加载的资源无法通过AssetBundle进行版本控制或更新。 - 加载的资源路径和名称必须正确,否则会返回null。
5. 替代方案
- 对于大型项目,建议使用AssetBundles或Addressables进行资源管理,它们提供更灵活的资源加载方式,支持资源的更新和版本控制。
总结来说,Resources.Load
是Unity中一种基础的资源加载方法,适用于小型项目或开发过程中的快速原型制作。但对于大型或需要高效资源管理的项目,应考虑使用更高级的资源管理系统。
6.以下是测试代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LoadResource : MonoBehaviour
{
AudioSource audioSource;
Texture texture;
// Start is called before the first frame update
void Start()
{
// 加载Resources文件夹下的预制体
GameObject go = Resources.Load("Cube") as GameObject;
Instantiate(go);
// 加载其他文件夹下的Resources下的预制体
GameObject goSphere = Resources.Load("Sphere") as GameObject;
Instantiate(goSphere);
// 加载音频文件
AudioClip audioClip = Resources.Load("Music/BGM") as AudioClip;
audioSource = this.gameObject.AddComponent<AudioSource>();
audioSource.clip = audioClip;
// 使用泛型加载文本
TextAsset textAsset = Resources.Load<TextAsset>("Documents/ReadMe");
string textString = textAsset.text;
Debug.Log(textString);
// 使用泛型加载图片
texture = Resources.Load<Texture>("Pictures/Picture");
}
// Update is called once per frame
void Update()
{
// 空格键破播放和暂停
if (Input.GetKeyDown(KeyCode.Space))
{
if (audioSource.isPlaying)
{
audioSource.Pause();
}
else
{
audioSource.Play();
}
}
}
//测试加载的图片
void OnGUI()
{
if(texture != null)
{
GUI.DrawTexture(new Rect(0,0,Screen.width, Screen.height)), texture);
}
}
}