Unity开发——获取服务器xLua文件,并保存到本地使用

一、将xlua文件放到服务器上

1、服务器

本文使用小皮面板(PhpStudy),快捷搭建本地服务器环境进行测试使用。

官方地址:https://www.xp.cn,本地服务器根目录地址为:http://localhost

2、服务器地址、本地路径

对应lua文件地址为:http://localhost/lua文件名,或http://localhost/各个层级文件夹名/文件名

本地存放读取lua文件的地址为:C:\Test\LuaFiles;

3、代码
cs 复制代码
//使用@,避免字符转义麻烦,注意路径地址中 /与\的使用

private string localhost = @"http://localhost/LuaFiles/FixhotUpdates.lua.txt";

private string LocalFile = @"C:\Test\LuaFiles\";

二、异步协程获取服务器lua文件并把内容复制到本地文件中

1、获取服务器数据

使用UnityWebRequest.Get(url);

cs 复制代码
UnityWebRequest request = UnityWebRequest.Get(url);
2、将数据写入本地文件

使用System.IO里的File系统;

cs 复制代码
File.WriteAllText(localPath, strData);
3、从服务器获取数据说明
(1)打开服务器

获取服务器数据时,记得把服务器打开。。。,真的会忘记导致报错或无法正常执行;

(2)向服务器发送请求

UnityWebRequest.SendWebRequest();将HTTP请求发送到远程服务器并处理服务器的响应;

(3)UnityWebRequest的方法

获得服务器响应后,可使用UnityWebRequest里的方法,进一步执行判断数据获取是否成功,处理返回的错误信息、使用服务器传回的数据等操作。

1)判断是否下载错误 :

cs 复制代码
if (request.isHttpError || request.isNetworkError)
    Debug.Log(request.error); 

isHttpError:HTTP是否出现错误; isNetworkError:系统是否出现错误; error:错误信息

**2)判断从服务器获取数据的进度:**float progress = request.downloadProgress

**3)以获取下载的数据:**string strData = request.downloadHandler.text;

三、特别说明:

1、普通数据获取与AssetBundle资源获取方式不同:
(1)获取文件数据,获取数据流即可
cs 复制代码
UnityWebRequest request = UnityWebRequest.Get(url);
yield return request.SendWebRequest();
string strData = request.downloadHandler.text;
(2)获取ab资源,要转为ab格式

使用UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(url);

若使用UnityWebRequest request = UnityWebRequest.Get(url);后面会出现类型转化问题。

关于ab资源生成、获取等具体操作说明,可看本人的另一篇关于AssetBundles的博文;

cs 复制代码
//正确用法:
UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(url);

yield return request.SendWebRequest();

AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request);

GameObject obj = ab.LoadAsset<GameObject>(abName);


//错误用法:
UnityWebRequest request = UnityWebRequest.Get(url);

yield return request.SendWebRequest();

//报转化格式无效的错误
AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request);

//转化结果,ab = null
AssetBundle ab = (request.DownloadHandler as DownloadHandler).assetbundle;
2、异步请求时,请求操作两种等待方式说明

1)yield return request;等待操作完成,在执行后续代码;

2)yield return request.IsDone;等待请求成功,但是不确定是否操作完成,继续执行后续代码;

3)常用yield return request;等待请求操作

三、功能代码

cs 复制代码
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using UnityEngine.Networking;
using System.IO;

public class LoadGame : MonoBehaviour
{
    private string localhost = @"http://localhost/LuaFiles/";
    private string LocalFile = @"C:\Temp\LuaFiles\";

    void Start()
    {
        LoadGameMethod();
    }

    /// <summary>
    /// 加载服务器上lua脚本并保存本地,
    /// 之后场景读取本地保存的lua文件
    /// </summary>
    public void LoadGameMethod()
    {
        StartCoroutine(LoadLuaResource("FishUpdates.lua.txt", localhost, LocalFile));
        StartCoroutine(LoadLuaResource("FishDispose.lua.txt", localhost, LocalFile));
    }

    IEnumerator LoadLuaResource(string fileName, string severPath, string localPath)
    {
        //注意要把服务器打开
        UnityWebRequest request = UnityWebRequest.Get(severPath + fileName);
        yield return request.SendWebRequest();

        yield return request.isDone;
        string str = request.downloadHandler.text;

        File.WriteAllText(localPath + fileName, str);
    }
}
相关推荐
讯捷蓝达3 小时前
戴尔R720xd服务器卡死在 “Configuring Memory...Done“,换了内存还是卡?问题根本不在内存
运维·服务器
波力海苔夹心脆6753 小时前
C# WPF 资源字典详解:ResourceDictionary、MergedDictionaries 与自定义控件案例
开发语言·c#·wpf·入门教程·resource·资源字典
数字新视界6 小时前
动环监控信创适配在智能机房管理中的应用价值与未来展望
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
爱和冰阔落6 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
AI导出鸭PC端6 小时前
Perplexity批量导出没有PDF模式?AI导出鸭插件补上最后一块拼图
人工智能·pdf·c#·ai导出鸭
寂寞的船6 小时前
【Unity知识速递】第8期 IL2CPP 托管堆内存碎片与原生堆交互机制深度解析
unity·游戏引擎·交互
lisanmengmeng6 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
Risehuxyc7 小时前
C# 选用更流行的语言版本
c#
Android系统攻城狮7 小时前
Linux FFmpeg深度解析之av_write_frame调用流程与实战(三十三)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
上火的金鱼妹7 小时前
k8s生产实际问题排查(网关,数据库读写等)
运维·服务器