淘先锋技术网

首页 1 2 3 4 5 6 7

说明:

本篇文章使用的是ULua中的SimpleFramework_UGUI-0.4.1,根据其中的一下Example学习之后自己处理的,很简单,随便学习一下。
简单介绍一下lua与Unity相结合,并做到热更新UI图片的使用,主要有如下几点:
  • Lua脚本内容
  • 服务器下载lua脚本,并解析内容
  • 热更新图片

Lua脚本内容:

PicName="Test2.jpg"
PicURL="http://drb.boss1388.com/DrB_Android/Important/Test1.jpg"
return PicName,PicURL
其中PicName——获取图片名称,用于之后方便查找并添加;PicURL——获取存于服务器地址上的图片

服务器下载lua脚本,并解析内容:

  /// <summary>
    /// 下载Lua文件
    /// </summary>
    /// <returns></returns>
    IEnumerator wait_LoadFile()
    {
        WWW www = new WWW("http://drb.boss1388.com/DrB_Android/Important/NewLua.lua");
        yield return www;
        if (www.isDone)
        {
            if (www.error != null)
            {
                Debug.Log(www.error);
            }
            else
            {
                //lua文件保存的路径
                string FilePath = Application.persistentDataPath + "/NewLua.lua";
                //以文件方式输入lua文件
                File.WriteAllBytes(FilePath, www.bytes);


                if (File.Exists(FilePath))
                {
                    //解析lua文件
                    LuaState luastate = new LuaState();
                    var t = luastate.DoFile(FilePath);
                    PicName = t[0].ToString();
                    PicURL = t[1].ToString();


                    //向UI上添加图片
                    StartCoroutine(wait_LoadTexture(PicName));
                }
            }
        }
    }

热更新图片:

/// <summary>
    /// 更新图片
    /// </summary>
    /// <param name="Path"></param>
    /// <returns></returns>
    IEnumerator wait_LoadTexture(string Path)
    {
        //判断本地是否存在图片,存在直接加载,不存在从服务器下载新的图片
        if (File.Exists("file://" + Application.persistentDataPath + "/" + Path))
        {
            WWW www = new WWW("file://" + Application.persistentDataPath + "/" + Path);
            yield return www;
            if (www.isDone)
            {
                if (www.error != null)
                {
                    Debug.Log(www.error);
                }
                else
                {
                    //获取添加的图片
                    var t = www.texture;
                    //将加载的图片Texture转换为Sprite类型
                    var spr = Sprite.Create(t, new Rect(0, 0, t.width, t.height), Vector2.zero);
                    //向UI添加图片
                    ShowTexture.GetComponent<Image>().sprite = spr;
                }
            }
        }
        else
        {
            WWW www = new WWW(PicURL);
            yield return www;
            if (www.isDone)
            {
                if (www.error ==null)
                {
                    //将图片保存到本地
                    File.WriteAllBytes(Application.persistentDataPath + "/" + PicName,www.bytes);

                    var t = www.texture;
                    var spr = Sprite.Create(t, new Rect(0, 0, t.width, t.height), Vector2.zero);
                    ShowTexture.GetComponent<Image>().sprite = spr;
                }
            }
        }
    }

总的代码展示:

using UnityEngine;
using System.Collections;
using LuaInterface;
using UnityEngine.UI;
using System.IO;

public class LuaTest : MonoBehaviour
{

    public GameObject ShowTexture;
    string PicName;
    string PicURL;

    void Start()
    {
        StartCoroutine(wait_LoadFile());
    }

    /// <summary>
    /// 更新图片
    /// </summary>
    /// <param name="Path"></param>
    /// <returns></returns>
    IEnumerator wait_LoadTexture(string Path)
    {
        //判断本地是否存在图片,存在直接加载,不存在从服务器下载新的图片
        if (File.Exists("file://" + Application.persistentDataPath + "/" + Path))
        {
            WWW www = new WWW("file://" + Application.persistentDataPath + "/" + Path);
            yield return www;
            if (www.isDone)
            {
                if (www.error != null)
                {
                    Debug.Log(www.error);
                }
                else
                {
                    //获取添加的图片
                    var t = www.texture;
                    //将加载的图片Texture转换为Sprite类型
                    var spr = Sprite.Create(t, new Rect(0, 0, t.width, t.height), Vector2.zero);
                    //向UI添加图片
                    ShowTexture.GetComponent<Image>().sprite = spr;
                }
            }
        }
        else
        {
            WWW www = new WWW(PicURL);
            yield return www;
            if (www.isDone)
            {
                if (www.error ==null)
                {
                    //将图片保存到本地
                    File.WriteAllBytes(Application.persistentDataPath + "/" + PicName,www.bytes);

                    var t = www.texture;
                    var spr = Sprite.Create(t, new Rect(0, 0, t.width, t.height), Vector2.zero);
                    ShowTexture.GetComponent<Image>().sprite = spr;
                }
            }
        }
    }

    /// <summary>
    /// 下载Lua文件
    /// </summary>
    /// <returns></returns>
    IEnumerator wait_LoadFile()
    {
        WWW www = new WWW("http://drb.boss1388.com/DrB_Android/Important/NewLua.lua");
        yield return www;
        if (www.isDone)
        {
            if (www.error != null)
            {
                Debug.Log(www.error);
            }
            else
            {
                //lua文件保存的路径
                string FilePath = Application.persistentDataPath + "/NewLua.lua";
                //以文件方式输入lua文件
                File.WriteAllBytes(FilePath, www.bytes);

                if (File.Exists(FilePath))
                {
                    //解析lua文件
                    LuaState luastate = new LuaState();
                    var t = luastate.DoFile(FilePath);
                    PicName = t[0].ToString();
                    PicURL = t[1].ToString();

                    //向UI上添加图片
                    StartCoroutine(wait_LoadTexture(PicName));
                }
            }
        }
    }
}

Unity中设置:


服务器上存放情况:


总结:

只是简单的应用了Ulua中的点点知识,其中的内容可自行修改