unity 通過xml外部載入視訊連結,圖片
阿新 • • 發佈:2018-12-17
載入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>