目录
一. 导入导出资源
在 Unity 中,导入和导出资源是非常重要的操作,它们可以帮助你在项目中使用各种外部资源,并将项目中的资源输出到其他平台或工具中.
常用的资源类型
- Unity 可以导入多种类型的资源,包括但不限于:
- 3D 模型:如.fbx、.obj、.dae 等格式的模型文件。
- 纹理:如.png、.jpg、.tga 等格式的图像文件。
- 音频:如.wav、.mp3、.ogg 等格式的音频文件。
- 脚本:如.cs、.js、.boo 等格式的脚本文件。
- 其他资源:如字体文件、动画文件、材质文件等。
导入
1.选择资源,选择导入新资产
然后在弹出的文件夹选择即可.
2.鼠标左键拖到unity的项目面板文件夹内,即可
3.导入包
后缀名是 .unitypackage的文件
也可以直接拖进去,或者点击资源->导入包
就可以显示包中的资源,选择相关的导入即可.
导出
也可以把自己的资源导出一个包,
点击 资源 ->到处包.
把需要导出的资源,前面的框选中.
点击导出即可.
二. AssetBundles(资产捆绑包)
在 Unity 中,AssetBundles(资产捆绑包)是一种将多个资源打包成一个单独文件的技术,它在游戏开发中具有重要的作用
作用:
资源管理和优化
- AssetBundles 允许你将游戏中的资源(如模型、纹理、音频、脚本等)分组打包,以便更高效地管理和加载资源。通过将相关的资源打包在一起,可以减少资源的加载时间和内存占用。
- 你可以根据游戏的需求,将不同类型的资源打包成不同的 AssetBundles,例如将所有的角色模型打包成一个 AssetBundle,将所有的场景道具打包成另一个 AssetBundle。这样可以在需要时只加载特定的 AssetBundle,避免加载不必要的资源。
热更新和动态内容加载
- AssetBundles 可以用于实现游戏的热更新功能。你可以将新的资源打包成 AssetBundle,并在游戏运行时下载和加载这些 AssetBundle,从而实现对游戏内容的更新,而无需重新发布整个游戏。
- 此外,AssetBundles 还可以用于动态加载游戏中的内容,例如在游戏中根据玩家的选择加载不同的关卡、角色或道具。这可以增加游戏的灵活性和可玩性。
跨平台部署
- AssetBundles 可以在不同的平台上使用相同的资源打包方式,从而实现跨平台部署。你可以将资源打包成 AssetBundle,并在不同的平台上加载这些 AssetBundle,确保游戏在不同平台上的资源一致性。
- 同时,AssetBundles 还可以根据不同平台的特点进行优化,例如在移动平台上使用压缩格式的纹理和模型,以减少资源的大小和加载时间。
1.创建AssetBundles资源
选择文件,在检查器底部
输入名字和变体名即可
如
2.然后创建Asset文件夹
创建一个Editor.需要在这个文件夹下写编辑器功能脚本.
创建代码文件
代码如下
using UnityEditor;
using System.IO;
public class CreateAssetBundles
{
[MenuItem("Assets/Build AssetBundles")]
static void BuildAllAssetBundles()
{
string assetBundleDirectory = "Assets/AssetBundles";
if (!Directory.Exists(assetBundleDirectory))
{
Directory.CreateDirectory(assetBundleDirectory);
}
BuildPipeline.BuildAssetBundles(assetBundleDirectory,
BuildAssetBundleOptions.None,
BuildTarget.StandaloneWindows);
}
}
点击资源按钮
找到我们新加的按钮,点击按钮
自动创建新的文件夹,并识别到我们创建的资源.
3.加载 AssetBundle 和资产
本地资源加载
使用 AssetBundles.LoadFromFile
API
首先是没变体的情况
首先导入
var myLoadedAssetBundle=AssetBundle.LoadFromFile(Path.Combine(Application.dataPath, "AssetBundles\\material"));
然后加载
myLoadedAssetBundle.LoadAsset<Material>("新建材质 1");
全部代码
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
public class LoadBundles : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
var myLoadedAssetBundle
= AssetBundle.LoadFromFile(Path.Combine(Application.dataPath, "AssetBundles\\material"));
if (myLoadedAssetBundle == null)
{
Debug.Log("Failed to load AssetBundle!");
return;
}
transform.GetComponent<MeshRenderer>().material = myLoadedAssetBundle.LoadAsset<Material>("新建材质 1");
}
// Update is called once per frame
void Update()
{
}
}
效果
变体的情况下
只需要修改一个地方
比如变体名为
这里就要修改为
其余用法一样
网络加载
IEnumerator InstantiateObject()
{
string url = "file:///" + Application.dataPath + "/AssetBundles/" + assetBundleName;
var request
= UnityEngine.Networking.UnityWebRequestAssetBundle.GetAssetBundle(url, 0);
yield return request.Send();
AssetBundle bundle = UnityEngine.Networking.DownloadHandlerAssetBundle.GetContent(request);
GameObject cube = bundle.LoadAsset<GameObject>("Cube");
GameObject sprite = bundle.LoadAsset<GameObject>("Sprite");
Instantiate(cube);
Instantiate(sprite);
}
三. 总结
本文介绍了导入导出资源,和打包assetbundles,做个了解就行.