unity AssetBundle.LoadFromFile 案例
时间: 2024-10-09 07:00:59 浏览: 31
AssetStudiov0.15.32.zip assetbundle资源查看工具
在Unity中,`AssetBundle.LoadFromFile`是一个用于从本地硬盘读取预先打包的AssetBundle(预加载的数据包)的功能。以下是一个简单的案例说明:
假设你已经将多个资源(如图片、音频、动画等)打包成一个名为`MyAssetBundle`的AssetBundle,并且这个AssetBundle存储在一个静态的位置,例如`Assets/PackagedBundles/MyAssetBundle.assetbundle`。
1. **准备AssetBundle**:
在Build设置中,将这些资源包含进AssetBundle以便将来可以加载。
2. **加载AssetBundle**:
使用C#编写一个脚本,如下所示:
```csharp
using UnityEngine;
using UnityEngine.UI; // 如果你需要加载UI相关的资源
using UnityEngine.AssetBundle;
public class LoadFromDisk : MonoBehaviour
{
private Button myButton; // 假设有一个按钮需要动态加载资源
void Start()
{
// 获取按钮组件
myButton = GetComponent<Button>();
// 设置按钮点击事件,当点击时加载AssetBundle
myButton.onClick.AddListener(LoadAssets);
// 加载AssetBundle
LoadAssetsFromDisk();
}
void LoadAssetsFromDisk()
{
string assetBundlePath = "Assets/PackagedBundles/MyAssetBundle.assetbundle";
using (var bundle = AssetBundle.LoadFromFile(assetBundlePath))
{
// 加载指定资源
var imageAsset = bundle.LoadAsset<Texture2D>("Image");
var audioAsset = bundle.LoadAsset<AudioSource>("Sound");
// 将加载的资源应用到UI元素上
if (imageAsset != null)
{
myButton.image.sprite = Sprite.Create(imageAsset, new Rect(0, 0, imageAsset.width, imageAsset.height), new Vector2(0.5f, 0.5f));
}
if (audioAsset != null)
{
audioAsset.Play();
}
bundle.Unload(false); // 释放资源,防止内存泄漏
}
}
}
```
在这个例子中,当玩家点击按钮时,脚本会尝试加载并显示指定的图像和播放音频。记得在`AssetBundle.Unload`调用时传入`false`参数,表示只卸载非必需的资源,让Unity保留必要的AssetBundle管理。
阅读全文