2020-03-30 17:01:18 zhu2370830 阅读数 24
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

Unity3D读取外部文件xml、json

C#读取XML文档

Unity3D读取XML文档不需要另外导入程序集(dll),直接引用System.Xml就行。
C#读取XML文档的代码需要根据xml文档结构做出修改。

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using LitJson;
using System.Xml;
using System.IO;
using UnityEngine.UI;
using System;
using UnityEngine.SceneManagement;

public class UnityWebApiJson_zhu : MonoBehaviour
{
 		void Start ()
		{
       		 //IO判断xml文件是否存在
				if (File.Exists (Application.streamingAssetsPath + "/WebAPIJsonURL.xml"))
            	{
						XmlDocument xml = new XmlDocument ();
						xml.Load (Application.streamingAssetsPath + "/WebAPIJsonURL.xml");
						//根节点<Xml>
						XmlNodeList xmlnodelist = xml.SelectSingleNode ("Xml").ChildNodes;
						foreach (XmlElement elem in xmlnodelist) 
						{	
								//字节点<WeapiPeople>
								if (elem.Name == "WebapiPeople")
                          	 	 {               
                          	 	 		//再下一级节点,第二个<Jsonurl>
										APIPeopleJsonUrl = elem.ChildNodes [1].InnerText.ToString ();
										Debug.Log ("APIPeopleJsonUrl" + APIPeopleJsonUrl);                 
								}
						  }
		        	}
			}
}

下面xml文档的内容
WebAPIJsonURL

C#读取Json文本

Unity3D读取json数据需要导入程序集LitJson.dll.
读取本地连接需要加上(file:\\),否则无法读取。

LitJson
读取json代码

private IEnumerator JSonPeopleFromWebAPI ()
{
		PeopleListImag.SetActive (true);//显示列表
		//下载json数据
		WWW ret = new WWW (APIPeopleJsonUrl);    //路径参数
		yield return ret;
		if (ret.error != null) {
				Debug.LogError ("error: " + ret.error);
				yield break;
		}
		if (string.IsNullOrEmpty (ret.text)) {
				yield break;
		}
		//json格式,using litJson
		JsonData JsdArray = JsonMapper.ToObject (ret.text);		
		for (int j = 0; j < JsdArray.Count; j++) {		
				CloneOBJ.transform.FindChild ("InCoalTime").GetComponent<Text> ().text = Convert.ToString (JsdArray [j] ["InCoalTime"]);
				CloneOBJ.transform.FindChild ("JobNumber").GetComponent<Text> ().text = Convert.ToString (JsdArray [j] ["JobNumber"]);
				CloneOBJ.transform.FindChild ("Name").GetComponent<Text> ().text = Convert.ToString (JsdArray [j] ["Name"]);
				CloneOBJ.transform.FindChild ("DName").GetComponent<Text> ().text = Convert.ToString (JsdArray [j] ["DName"]);
				CloneOBJ.transform.FindChild ("X").GetComponent<Text> ().text = Convert.ToString (JsdArray [j] ["X"]);
				CloneOBJ.transform.FindChild ("Y").GetComponent<Text> ().text = Convert.ToString (JsdArray [j] ["Y"]);
				CloneOBJ.transform.FindChild ("CO").GetComponent<Text> ().text = Convert.ToString (JsdArray [j] ["CO"]);
				CloneOBJ.transform.FindChild ("CH4").GetComponent<Text> ().text = Convert.ToString (JsdArray [j] ["CH4"]);
				CloneOBJ.transform.FindChild ("SN").GetComponent<Text> ().text = Convert.ToString (JsdArray [j] ["SN"]);
				CloneOBJ.transform.FindChild ("ID").GetComponent<Text> ().text = Convert.ToString (JsdArray [j] ["ID"]);         
		}
}
   

在这里插入图片描述

2013-06-27 13:00:40 gghu1986 阅读数 1836
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

Unity3d 动态读取外部文件 收藏 分两种情况:

1,加载封装好的内部文件。

var aaa : Material;//空材质

var bbb : GameObject;//要绑定材质的模型

function Start()

{ aaa.mainTexture = Resources.Load("你的资源名,例如“pic1”不需要文件扩展名");

 bbb.renderer.material = aaa;

 }

 

2,加载磁盘文件

var bbb : GameObject;

function Start ()

{ var www = new WWW ("file://D:\\pic1.jpg"这里也可以是网络图片地址);

 yield www;

bbb.renderer.material.SetTexture("_MainTex", www.texture);

}

 

动态加载外部文件,内部封装的用Resources.Load加载,外部的用www方法调用

2015-05-26 18:10:02 ImOTT 阅读数 648
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

 1、调用外部浏览器

void OnGUI()
{
  if (GUI.Button(new Rect(50, 50, 100, 30), "Click"))
  {

    Process.Start("IExplore.exe", "http://blog.csdn.net/imott");

  }

}

2、调用外部EXE

void OnGUI()
{
  if (GUI.Button(new Rect(50, 50, 100, 30), "Click"))
  {
    Process.Start("C:\\Program Files\\Tencent\\QQ\\Bin\\QQ.exe");

  }

}

Unity3d 动态读取外部文件分两种情况:
1,加载封装好的内部文件。
var aaa : Material;//空材质
var bbb : GameObject;//要绑定材质的模型
function Start()
{ aaa.mainTexture = Resources.Load("你的资源名,例如“pic1”不需要文件扩展名");
bbb.renderer.material = aaa;
}

2,加载磁盘文件
var bbb : GameObject;
function Start ()
{ var www = new WWW ("file://D:\\pic1.jpg"这里也可以是网络图片地址);
yield www;
bbb.renderer.material.SetTexture("_MainTex", www.texture);
}

动态加载外部文件,内部封装的用Resources.Load加载,外部的用www方法调用 

2014-05-19 19:54:53 hale445566 阅读数 4858
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

unity里的图片在生成时会压缩成资源文件,有时客户想自己放一些图片用unity显示,就必须加载外部图片。

大体思路:用Application.streamingAssetsPath或Application.dataPath来指定存放图片的相对路径。用DirectoryInfo获得文件夹,遍历后FileInfo获得所有文件,然后判断后缀名是否为图片,是的话用www.texture转为图片并存入集合。


完整代码:

using UnityEngine;
using System.Collections;
using System.IO;
using System.Collections.Generic;
public class LoadFileImage : MonoBehaviour {
    //是否显示图片
    public static bool isShow;
    //图片文件路径集合
    List<string> fileName=new List<string>();
    //图片集合
    List<Texture2D> textureList=new List<Texture2D>();
    public Texture2D close;
    public Texture2D next;
    public Texture2D previous;
    private int mainTexNum;
    private float sW;
    private float sH;

    void Start() {
        sW = Screen.width;
        sH = Screen.height;
        GetAllFile(new DirectoryInfo(UnityEngine.Application.streamingAssetsPath+"/"));
        GetAllTexture();
    }

    void OnGUI() {
        GUI.depth = 0;
        if (!isShow) return;

        GUI.DrawTexture(new Rect(0, 0, sW, sH), textureList[mainTexNum]);

        //下一页
        ChangeTexture(next);
        if (GUI.Button(new Rect(sW / 2 + 20, sH - next.height - 20, next.width, next.height), ""))
        {
            if (mainTexNum == textureList.Count - 1)
                mainTexNum = 0;
            else
                mainTexNum += 1;
        }
        //上一页
        ChangeTexture(previous);
        if (GUI.Button(new Rect(sW / 2 - previous.width - 20, sH - previous.height - 20, previous.width, previous.height), ""))
        {
            if (mainTexNum == 0)
                mainTexNum = textureList.Count - 1;
            else
                mainTexNum -= 1;
        }
        //关闭
        ChangeTexture(close);
            if (GUI.Button(new Rect(sW - close.width - 10, 10, close.width, close.height), ""))
                isShow = false;
    }

    /// <summary>
    /// 根据文件路径加载图片
    /// </summary>
    private void GetAllTexture() {
        foreach (string s in fileName) {
            WWW www = new WWW("file://"+s);
            textureList.Add(www.texture);
        }
    }
    /// <summary>
    /// 获得全部图片文件路径
    /// </summary>
    /// <param name="info">文件夹</param>
    private void GetAllFile(FileSystemInfo info){
         if(!info.Exists) return;
        DirectoryInfo dir=info as DirectoryInfo;
        if(dir==null) return;
        FileSystemInfo[] si=dir.GetFileSystemInfos();
        for (int i = 0; i < si.Length; i++) {
            FileInfo fi = si[i] as FileInfo;
            if (fi != null)
            {
                if (IsImage(fi.Extension))
                    fileName.Add(fi.FullName);
            }
            else
                GetAllFile(si[i]);
        }
        
    }
    /// <summary>
    /// 判断文件是不是图片
    /// </summary>
    /// <param name="name">文件名</param>
    private bool IsImage(string name) {
        string[] imageName = { ".jpg", ".png", ".gif", ".bmp", ".psd", ".tga", ".psd", ".JPG", ".PNG", ".GIF", ".BMP", ".PSD", ".TGA", ".PSD" };
       
        for (int i = 0; i < imageName.Length;i++ )
        {
            if (name.Equals(imageName[i]))
                return true;
        }
        return false;
    }

    /// <summary>
    /// 改变按钮三种状态图片
    /// </summary>
    /// <param name="tex"></param>
    private void ChangeTexture(Texture2D tex)
    {
        GUI.skin.button.normal.background = tex;
        GUI.skin.button.hover.background = tex;
        GUI.skin.button.active.background = tex;
    }
}




2016-11-05 11:50:56 YongYu_IT 阅读数 1772
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

来自:http://www.cnblogs.com/kex1n/p/3415332.html

Unity3D论坛最近因为需求加载unity外部图片,所以就小研究了下,下面是自己尝试的集中方法,包括发布的exe、web、以及Flash三个平台的测试(皆是通过读取XML配置文件加载):

第一种方法:通过Resources.Load()加载

       这个方法是unity内部提供的一个动态加载的方法,但是经过测试发现,放入unity内部Resources文件下的所有图片发布出来之后都是经过编译的,也就是说我没法在发布出来的文件进行随意的更改我想要显示的图片,这样通过XML配置文件读取就没有任何意思了,所以自己放弃了这种方法。

第二种方法:通过WWW类加载

    这个类也是unity3d内部提供的加载,通过这个类的调用,我们一方面是可以加载本地的图片,一方面也可以加载网络上的图片,所以3d软件这为我们做图片的动态加载提供了很好的解决方案,方法如下:

  这个是我的XML配置文件:

  <config>
<photos icon = "Small\\small_1" original = "Original\\original_1" ></photos>
<photos icon = "Small\\small_2" original = "Original\\original_2" ></photos>
<photos icon = "Small\\small_3" original = "Original\\original_3" ></photos>
<photos icon = "Small\\small_4" original = "Original\\original_4" ></photos>
<photos icon = "Small\\small_5" original = "Original\\original_5" ></photos>
<photos icon = "Small\\small_6" original = "Original\\original_6" ></photos>
<photos icon = "Small\\small_7" original = "Original\\original_7" ></photos>
<photos icon = "Small\\small_8" original = "Original\\original_8" ></photos>
</config>

一下是我读取的代码

  • using UnityEngine;
  • using System.Collections;
  • using System.Collections.Generic;
  • using System.IO;
  • using System.Xml;
  • using System.Text;
  • public class ThurmilUI3 : MonoBehaviour {
  •            private Texture[] icon;
  •            private Texture[] originalPhoto;
  •            private string xmlPath = @"/config.xml";
  •            private string photoPath = @"/photos/";
  •            private string iconPath = @"/photos/";
  •            private string tempPath = "";
  •            private WWW www;
  •            IEnumerator Start()
  •            {
  •                  xmlPath = Application.dataPath +@"/.."+ xmlPath;
  •                  photoPath ="file://"+ Application.dataPath + @"/.."+ photoPath;
  •                  iconPath ="file://"+ Application.dataPath + @"/.."+iconPath;
  •                  if(File.Exists(xmlPath))
  •                  {
  •                          XmlDocument xmlDoc = new XmlDocument();
  •                          xmlDoc.Load(xmlPath);
  •                          XmlNodeList nodeList = xmlDoc.SelectSingleNode("config").ChildNodes;
  •                          PrcNum = nodeList.Count;
  •                          icon = new Texture[PrcNum];
  •                          originalPhoto = new Texture[PrcNum];
  •                          int j = 0;
  •                         foreach(XmlElement xe in nodeList)
  •                        {
  •                             Debug.Log("index of image: "+j);
  •                             tempPath = iconPath + xe.GetAttribute("icon")+".jpg";
  •                              debugMes = tempPath;
  •                              www = new WWW(tempPath);
  •                              yield return www;
  •                             if(www.isDone)
  •                            {
  •                                   icon[j] =www.texture;
  •                                   if(icon[j] != null)
  •                                       Debug.Log("Load "+tempPath+" success");
  •                                  else
  •                                       Debug.Log("Not Found "+tempPath);
  •                            }
  •                            tempPath = photoPath + xe.GetAttribute("original")+".jpg";
  •                            www = new WWW(tempPath);
  •                           yield return www;
  •                            if(www.isDone)
  •                            {
  •                                  originalPhoto[j]=www.texture;
  •                                 if(originalPhoto[j]!= null)
  •                                        Debug.Log("Load "+tempPath+" success");
  •                                 else
  •                                        Debug.Log("Not Found "+tempPath);
  •                          }
  •                           j++;
  •              }
  •        }
  •      else
  •     {
  •            debugMes = "xmlPath is not found";
  •            Debug.LogError("xmlPath is not found");
  •            return false;
  •      }
  •    }
  • void Update()
  • {
  •         //在这里我们就可以做我的自己想做的事了
  • }
  • }


复制代码

第三种方法:通过引入System.Drawing的Image类加载显示图片:

方法基本跟上面一样,就说下核心部分:

首先我们可以通过Image image = Image.FromFile(ImagePath);来加载一个图片

或者是通过    FileStream fs = new FileStream(tempPath,FileMode.Open,FileAccess.Read);

        Image image = Image.FromStream(fs);来加载材质贴图图片

以上方法加载的图片都是一个Image类的属性,跟我们unity3d中使用的Texture2D没法联系上,经过

自己的思考,首先我们可以通过把image加载进来的图片数据信息提取出来,然后再通过Texture2D.LoadImage(byte[] bytes);

来转换到我们再unity中可以使用的Texture2D类,

所以我们首先要编写个获取image图片数据的方法:

    • public byte[] imageToByteArray(System.Drawing.Image imageIn)
    • {
    • MemoryStream ms = new MemoryStream();
    • imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Png);
    • return ms.ToArray();
    • }

没有更多推荐了,返回首页