1. 程式人生 > >unity 通過xml外部載入視訊連結,圖片

unity 通過xml外部載入視訊連結,圖片

載入xml的程式碼

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using System.Xml;
using FrameWork;
using UnityEngine.UI;

public class WebGl_LoadXml : FrameworkComponent
{
    public string path= "ExternData/ExtralLoad/videoxml.xml";
    protected override void Awake()
    {
        base.Awake();
        StartLoadURL(path);
    }
    public override void Init()
    {

    }
    #region 對外介面
    /// <summary>
    /// 獲得外部網頁的視訊連結
    /// </summary>
    /// <param name="ID">需要視訊的對應ID</param>
    /// <param name="needURl">外部載入的視訊連結</param>
    /// <returns>是否載入成功</returns>
    public bool GetUrl(byte ID, out string needURl)
    {
        if (isFinished)
        {
            needURl = AnalysisXml(text, ID);
            return true;
        }
        else
        {
            StartLoadURL(path);

            Debug.Log("未載入存放視訊的xml");

            needURl = null;

            return false;
        }
    }
    private string needURl;
    /// <summary>
    /// 未載入視訊xml,需要先載入xml,再呼叫對應的事件
    /// </summary>
    /// <param name="ID">需要視訊的對應ID</param>
    /// <param name="unityAction">未載入xml,傳遞需要的視訊連結</param>
    public void GetUrl(byte ID, UnityAction<string> unityAction)
    {
        if (isFinished)
        {
            needURl = AnalysisXml(text, ID);
            unityAction(needURl);
        }
        else
        {
            StartLoadURL(path, unityAction);

        }
    }

    public void GetImage(string url, UnityAction<Texture> callBack)
    {
        StartLoadImage(url, callBack);
    }
    #endregion

    #region 載入單個外部視訊連結

    private string text;
    private bool isFinished = false;
    private byte ID;
    /// <summary>
    /// 載入存放視訊的xml
    /// </summary>
    /// <param name="url">相對路勁</param>
    public void StartLoadURL(string url, UnityAction<string> callBack = null)
    {
        if (Application.isEditor)
        {
            url = "file:///" + Application.dataPath + "/" + url;
        }
        else
        {
            url = Application.dataPath + "/" + url;
        }
        StartCoroutine(WaitText(url, callBack));
    }

    public IEnumerator WaitText(string url, UnityAction<string> callBack)
    {
        isFinished = false;
        yield return StartCoroutine(LoadText(url));
        isFinished = true;

        if (callBack != null)
        {
            callBack(AnalysisXml(this.text, this.ID));
        }
    }
    private IEnumerator LoadText(string url)
    {
        WWW www = new WWW(url);

        yield return www;

        this.text = www.text;
    }
    private string AnalysisXml(string text, byte ID)
    {

        XmlDocument doc = new XmlDocument();
        doc.LoadXml(text);
        XmlNode xmlNode = doc.SelectSingleNode("root");
        for (int i = 0; i < xmlNode.ChildNodes.Count; i++)
        {
            if (xmlNode.ChildNodes[i].Attributes["ID"].InnerText == ID.ToString())
            {
                Debug.Log("開啟視訊連結" + xmlNode.ChildNodes[i].InnerText);
                return xmlNode.ChildNodes[i].InnerText;
            }
        }
        Debug.Log("空連線");
        return null;
    }
    #endregion

    #region 載入外部圖片

    private Texture image;
    /// <summary>
    /// 載入存放視訊的xml
    /// </summary>
    /// <param name="url">相對路勁</param>
    public void StartLoadImage(string url, UnityAction<Texture> callBack)
    {
        if (Application.isEditor)
        {
            url = "file:///" + Application.dataPath + "/" + url;
        }
        else
        {
            url = Application.dataPath + "/" + url;
        }
        StartCoroutine(WaitImage(url, callBack));
    }

    public IEnumerator WaitImage(string url, UnityAction<Texture> callBack)
    {
        yield return StartCoroutine(LoadImage(url, callBack));
    }
    private IEnumerator LoadImage(string url, UnityAction<Texture> callBack)
    {
        WWW www = new WWW(url);

        yield return www;

        this.image = www.texture;
        if (callBack != null) callBack(www.texture);
    }


    #endregion

}

xml中的寫法

<?xml version="1.0" encoding="utf-8"?>
<root>
  <URL ID="0"  introduce="第一個視訊教學的視訊連結">http://www.baidu.com</URL>
  <URL ID="1"  introduce="第二個視訊教學的視訊連結">http://www.baidu.com</URL>
  <URL ID="2"  introduce="第三個視訊教學的視訊連結">http://www.baidu.com</URL>
  <URL ID="3"  introduce="第四個視訊教學的視訊連結">http://www.baidu.com</URL>
  <URL ID="4"  introduce="第五個視訊教學的視訊連結">http://www.baidu.com</URL>
</root>