赞
踩
本篇文章主要讲解Resource文件在Unity场景中的使用以及他的基本概念。
随着我们对Unity的操作不断的熟练,对于一些更具有挑战性的东西我们也要不断的去了解,说到操作文件大家应该都不陌生,(如果有不会的小伙伴可以去参考我的系列文章,里边讲解了在C#中我们对于文件的一些操作以及概念!!!!!)而在Unity中我们如果想让程序去自动寻找我们文件夹下的某些东西此时我们该怎么办?下面开始介绍Resource文件的概念以及使用。
提示:以下是本篇文章正文内容,下面案例可供参考
Resource文件在Unity中是需要我们自己创建的,我们要在Assets文件下新建一个名字命名为Resource。(注意!!!一定要命名正确)但是注意!!!Resource文件夹,用于在运行时加载资源。使用Resource.Load(“path”)的方式加载,简单方便。但是值得注意的是我们的Resource文件夹在打包出来是没有的。
但是尽量不要使用它,
1:它使内存管理变得困难;
2:不恰当的使用Resource文件夹,会增加程序启动时间和打包时间;
3:降低了工程中的内容转换到特定平台的能力,使内容更新困难
4:随着Resources文件夹数量的增加,对这些文件夹中的Assets的管理变得非常困难
5:资源系统降低了项目向特定平台提供自定义内容的能力,并消除了增量内容升级的可能性
6:unity为了兼容所有平台,Resources文件下的资源使用的统一打包,这就会对资源的优化有一定的限制,比如说把图片放在Resource文件夹下,unity不会对这些图片做压缩,这无异是增加了包体大小。
在一些特殊情况下也是可以使用的
1用于资源加载,常用Resource.Load<泛型>(加载文件名字)得到asset下的Resource文件中的目标文件,搜索方式是以asset目录下子目录为Resource名字的文件夹,再找需要加载文件的名字。返回的是泛型的对象。
代码如下(示例):
public class ExampleClass : MonoBehaviour {
public AudioSource _myAudioSource;
void Start()
{
string namePath = "MyAudioClips/十年";
AudioClip clip = Resources.Load<AudioClip>(namePath);
_myAudioSource.clip = clip;
if( _myAudioSource.clip!=null)
{
_myAudioSource.Play();
}
}
}
此时我们的文件路径是Assets/Resources/MyAudioClips/十年.wav
值得我们注意的是如果加载文件名字在整个资源中有两个的话,是加载目录路径层次高的那个Resource文件夹中的资源,可以在Resource文件夹下添加文件夹然后可以指定搜索某一个文件夹中的文件。
1该方法的使用跟上边的使用方法基本上大同小异,只不过Resource.LoadAll返回的是一个数组,所以我们就要定义一个数组对象去接收我们得到的值
代码如下(示例):
public class ExampleClass : MonoBehaviour {
public AudioSource _myAudioSource;
void Start()
{
string namePath = "MyAudioClips";
AudioClip[] clip = Resources.LoadAll(namePath);
_myAudioSource.clip = clip.[0];
if( _myAudioSource.clip!=null)
{
_myAudioSource.Play();
}
}
}
该方法是用来释放内存用的,在我们使用Destroy方法后其实我们的unity后台是没有把内存释放的。在destroy后再使用我们的这个方法就释放了。值得注意的是如果你的Resource.Load()赋值给一个变量后,然后Destroy这个实例对象,在使用这个方法是无法在内存中删除的,需要把这个变量制为空就可以了,因为这个变量是一直引用着Resource.Load的,所以Resource.Load最好不要添加引用。在使用Destroy实例对象后没有使用此方法,再次实例新的对象是不会增加内存的消耗的
主要讲解了一下Unity中Resource文件夹的使用方法,大家可以新建一个Unity工程去尝试一下。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。