基于Unity开发WebGL项目加载AB包(三)

在前两篇文章中,我们分别了解了WebGL如何通过StreamingAssets加载AB包资源(链接:基于Unity开发WebGL项目加载AB包(一)_梵高先森丶的博客-CSDN博客)和如何通过局域网(本地服务器)加载AB包资源(链接:基于Unity开发WebGL项目加载AB包(二)_梵高先森丶的博客-CSDN博客),那么本文,我们将一起来了解如何通过公网(外部服务器)加载AB包资源。

一、配置公网服务器:

  目前市面上有很多云服务器可以免费试用30天(阿里云服务器,腾讯云服务器),大家可以找一个喜欢的申领免费使用权,本文使用的是腾讯云服务器。

官网:

腾讯云 产业智变·云启未来 - 腾讯

 领取的时候注意选择操作系统,没有其他操作系统经验的同学建议和我一样选择Windows Server操作系统,在后续的操作中会顺利很多。

领取之后会获得一个云服务器实例,可以看作是一台作为服务器使用的windows系统的云电脑/虚拟机:

 点击登录,设置好密码之后,可以进入到该云电脑的操作系统界面:

 点开服务器管理器配置服务器:

 1.添加角色并配置IIS服务器:

 IIS网站部署——基本流程_独行~背包客的博客-CSDN博客_部署iis

 过程不赘述。

2.放入我们的资源:

由于我们的服务器也是windows系统,所以远程控制和传输文件就非常简单了,大家可以给服务器装上todesk,向日葵等各种远程控制工具来进行文件传输,将我们的AB包资源文件夹传入到服务器的磁盘中:

接下来我们把这个文件夹作为一个网站发布到IIS服务器上:

 查看其MIME类型文件,HTTP响应标头,以及目录浏览权限是否均添加或开启,详细步骤见前两篇文章。完成一系列步骤之后,可以在我们的物理主机上或者其他任意一台电脑上尝试访问该网站,访问方式为服务器公网IP+配置的网站端口(下图是服务器公网IP),

访问后发现无法访问,那么这时候我们的问题可能是:没有将我们这个网站的端口添加到服务器防火墙允许访问的列表中,那么我们可通过以下操作添加:

 

 

 

 确定之后,我们再去访问这个页面,就能看到熟悉的界面啦:

 二、加载资源:

  上一步操作完成后,我们的资源和服务器部署已经完成了,接下来要做的就是在我们的项目里去加载这个资源,首先修改代码,将要访问的资源路径改成公网的路径:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

public class LoadABTest : MonoBehaviour
{

    private void Start()
    {
        string filePath = "";
        if (Application.platform == RuntimePlatform.WindowsEditor)
        {
            //filePath = Application.streamingAssetsPath + "/PC/myabcube.unity3d";
            //filePath = "http://192.***.*.*:8050" + "/PC/myabcube.unity3d";
            filePath = "http://1.***.***.***:8050" + "/PC/myabcube.unity3d";
        }
        else if (Application.platform == RuntimePlatform.WebGLPlayer)
        {
            //filePath = Application.streamingAssetsPath + "/WEB/myabcube.unity3d";
            //filePath = "http://192.***.*.*:8050" + "/WEB/myabcube.unity3d";
            filePath = "http://1.***.***.***:8050" + "/WEB/myabcube.unity3d";
        }

        StartCoroutine(LoadModelEntity(filePath));
    }


    private UnityWebRequest request;
    IEnumerator LoadModelEntity(string path)
    {

        request = UnityWebRequestAssetBundle.GetAssetBundle(path);//请求资源

        yield return request.SendWebRequest();//等待完成

        AssetBundle ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;//转为AB包

        if (ab != null)
        {
            GameObject objModel = Instantiate(ab.LoadAsset<GameObject>("myabcube"));//实例化

            objModel.name = "MyABCubeGroup";//重命名

            ab.Unload(false);
        }
        else
        {
            Debug.LogError("ab=null,未加载到AB包");
        }
    }
}

保存后在编辑器运行,发现资源可以正常加载,那么就可以将我们的项目build并发布到IIS,然后打开,发现资源也可以正常加载:

 到这里,就说明我们已经可以从公网服务器加载AB包资源啦。

拓展:

完成上述步骤后,我们的资源是可以从公网加载了,但是我们的项目却还是只能局域网加载,那么我们怎样可以让别人也能从公网打开我们的项目呢。这里我跟大家分享两个方法。

方法一、通过云服务器发布我们的项目:

 步骤和把AB包资源在服务器上发布一样。

 1.先把打包好的项目文件夹传到服务器云电脑的磁盘:

  

 然后将其发布到云电脑的IIS服务器上。

 发布后检查其MIME文件类型和HTTP响应标头是否添加,没问题之后,在服务器的防火墙允许访问的端口列表中添加我们这个网站的端口号:

完成之后在电脑浏览器输入地址访问(公网IP+网站端口)

 

 可以看到我们正常地通过公网地址打开了我们项目,并加载到了AB包资源。

方法二、通过GitHub将项目发布到公网:

1.在GitHub创建一个自己的版本库并克隆到本地。

2.将我们build好的项目文件夹放入到本地版本库:

3. 将版本库的改动进行提交和推送,然后在GitHub上刷新出刚刚推送的内容,点击Setting-page,Brabch选择main,然后save。

稍后片刻可以得到一个链接:

在浏览器输入这个链接并在后面加入文件地址/Test20221027/index,就可以打开我们的项目了。不过在这里加载AB包会遇到一些问题,就是我们是通过http协议加载的,而gitHub的页面是https页面,所以我们的资源并不能加载出来,由于这一部分不是本文重点,所以至于怎么解决本文暂时不做分享,网上有很多案例已经讲过了,感兴趣的同学可以自行去查询。

好啦,到此我们关于WebGL加载AB包的相关内容分享就结束了,欢迎大家一同交流探讨。

猜你喜欢

转载自blog.csdn.net/weixin_43818160/article/details/127614743