Unity IIS服务 加载 AssetBundle
OK 老规矩,直接上代码上图片:
如果不知道 IIS服务基础配置请跳到: Unity 搭载 IIS 服务 局域网运行
注意把 Project Settings --->> Other Settings --->> Strip Engine Code 勾选取消掉(默认是勾选的)
剥离未使用的引擎代码(如果勾选好像问题也不是特别大 但是不勾选有可能会出现一些问题)
AssetBundle 创建
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;
/// <summary>
/// 菜单编辑 按钮点击
/// </summary>
public class CreateAssetBundle_ZH : MonoBehaviour
{
//菜单栏 Button 创建
[MenuItem("Asset/Build AssetBundles")]
static void BuildAllAssetBundles()
{
string _AssetBundleDirectory = Application.streamingAssetsPath + "/AssetBundles";//Application.dataPath + "/Resources";
if (!Directory.Exists(_AssetBundleDirectory))
{
Directory.CreateDirectory(_AssetBundleDirectory);
}
//构建编辑中指定的所有资产包 变量( 构建地址、 资产包构建选项、目标构建平台)
BuildPipeline.BuildAssetBundles(_AssetBundleDirectory, BuildAssetBundleOptions.ChunkBasedCompression, BuildTarget.WebGL);
//资源刷新
AssetDatabase.Refresh();
}
}
预制体创建:注意添加 AssetBundel 名字(扩展名看需添加)
添加之后需要 Build 一下 执行的就是:CreateAssetBundle_ZH 类 BuildAllAssetBundles() 方法
AssetBundle 加载
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
/// <summary>
/// AssetBundle 预制体加载
/// </summary>
public class AssetBundleLoad_ZH : MonoBehaviour
{
//物体生成位置
private GameObject _MyText;
[SerializeField]
//输入要加载的 AB 预制体名字
private InputField _InputField;
[SerializeField]
//点击加载
private Button _ButtonAsste;
//路径显示
public Text _URLPath;
void Start()
{
_MyText = GameObject.Find("Panel");
_ButtonAsste.onClick.AddListener(OnClickLoad);
}
public void OnClickLoad()
{
//StartCoroutine(ResourcesLodaing());
StartCoroutine(LoadAction());
}
//application/x-ms-manifest
public IEnumerator LoadAction()
{
// AssetBundle 路径加载
string _Url = Application.streamingAssetsPath + "/AssetBundles/" + _InputField.text;//_InputField.text;//testassetbundle
_URLPath.text = _Url;
//网络加载
using (UnityWebRequest _Uwr = UnityWebRequestAssetBundle.GetAssetBundle(_Url))
{
yield return _Uwr.SendWebRequest();
if (_Uwr.isNetworkError || _Uwr.isHttpError)
{
Debug.Log(_Uwr.error);
}
else
{
//返回下载的AssetBundle,或null。
AssetBundle _AssetBundle = DownloadHandlerAssetBundle.GetContent(_Uwr);
if (_AssetBundle)
{
var _Prefab = _AssetBundle.LoadAsset<GameObject>(_InputField.text);
if (_Prefab)
{
GameObject _MyTextPre = Instantiate(_Prefab, _MyText.transform.position, Quaternion.identity);
_MyTextPre.transform.SetParent(_MyText.transform);
}
}
}
}
}
private void Update()
{
//按键退出
if (Input.GetKeyDown(KeyCode.Escape))
{
Application.Quit();
}
}
}
最终呈现效果:以此就可以实现 IIS 服务 AssetBundel 加载了。
如果更换 StreamingAssets 文件夹下的 AssetBundel 预制体会出现什么现象呢?
自己尝试一下吧。
暂时先这样吧,如果有时间的话就会更新,如果实在看不明白就留言,看到我会回复的。
路长远兮,与君共勉。