《暗黑战神》个人部分学习笔记 记录

发布时间 2023-04-01 23:01:52作者: 章章_思游容

SIKI学院 暗黑战神课程 跳转链接

其他同学的笔记 csdn: 正版游戏的受害者 ARPG实战

CSDN:听雨眠丨 暗黑战神学习部分笔记



音效播放服务中的一段代码

private Dictionary<string, AudioClip> adDic = new Dictionary<string, AudioClip>();
public AudioClip LoadAudio(string path, bool cache = false) {
AudioClip au = null;
if (!adDic.TryGetValue(path, out au)) {
au = Resources.Load(path);
if (cache) {
adDic.Add(path, au);
}
}
return au;
}
讲一下逻辑和为什么这么设计

这段代码的逻辑是加载音频文件并进行缓存,以提高程序的运行效率。

具体来说,该函数接受一个字符串参数path表示要加载的音频文件的路径。如果cache为false,则每次调用该函数时都会重新加载音频文件;如果cache为true,则会先检查字典adDic中是否已经有了该路径对应的音频文件,如果已经存在,则直接从字典中获取;否则就通过Resources.Load方法加载该路径对应的音频文件,并将其添加到字典中以备下次使用。

为什么要设计成这样呢?因为Unity引擎在加载资源时需要消耗较长的时间和内存,反复加载同一资源会导致不必要的浪费。使用这种缓存机制可以避免重复加载同一资源,从而提高程序的性能表现。

Resources.Load方法加载资源是怎么回事

Resources.Load方法是Unity引擎提供的一种资源加载方式,可以用来加载工程中的资源文件。具体原理是Unity会将工程中所有资源预先打包成二进制格式,并存储在指定目录下的资源包(.asset)中。当我们使用Resources.Load方法时,Unity会根据传入的路径去寻找对应的资源包,并将其中的资源加载到内存中。

例如,我们可以通过以下代码来加载一个名为"Assets/Resources/TestImage.png" 的图片资源:

Texture2D texture = Resources.Load<Texture2D>("TestImage");

这里的参数"path"实际上表示相对于Resources目录下的路径。因此,上述代码中的"path"实际上是"TestImage"而不是 "Assets/Resources/TestImage.png"。

需要注意的是,由于Resources.Load方法是在运行时动态加载资源,因此它的性能可能较低。如果你需要加载的资源在游戏运行过程中不变且数量有限,建议使用更快速、更高效的资源管理方式,如将资源打包成AssetBundle或进行静态加载等。