2016-01-07 20:14:47 u013086341 阅读数 364
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4645 人正在学习 去看看 张刚
using UnityEngine;
using System.Collections;
using System.IO;
using System;

public class ReadOrSaveFile : MonoBehaviour
{
    //保存信息到文件
    public void SaveContentToFile(string _Path,string _fileName, string _content)
    {
        //string fileName = "Text_" + DateTime.Now.ToString("yyyy_MM_dd_H_m_s") + ".txt"; 时间命名文件名
        string directoryPath = _Path;        
        string filename = _fileName;            
        if (!Directory.Exists(directoryPath))  
        {
            Directory.CreateDirectory(directoryPath);
        }
        StreamWriter sw = new StreamWriter(Path.Combine(directoryPath, _fileName));
        sw.Write(_content);
        sw.Flush(); //清楚缓存内容
        sw.Close();

    }
    //截屏
    public void captureScreenshot(string path)
    {
        string _path = Path.Combine(path, "GameLog_" + DateTime.Now.ToString("yyyy_MM_dd_H_m_s") + ".png");
        Application.CaptureScreenshot(_path);
    }
    //读取文件中信息
    public ArrayList GetContentInFile(string _Path, string _content)
    {
        ArrayList arrayList = new ArrayList();
        StreamReader sr = null;     //使用流的形式读取
        sr = File.OpenText(_Path);
        if (sr != null)
        {
            string str;
            while ((str = sr.ReadLine())!= null)
            {
                arrayList.Add(str);
            }
        }
        sr.Close();     //关闭流
        sr.Dispose();   //销毁流
        return arrayList;

    }
}

2012-11-28 20:46:38 ldghd 阅读数 1438
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4645 人正在学习 去看看 张刚

 

 

 

 


using UnityEngine;
using System.IO;
using System;
using System.Collections;
public class CGraetText : MonoBehaviour
{
    private string m_sFileName = "FileName.txt"; // 文件名
    private string m_sPath = Application.persistentDataPath; // 路径
    private ArrayList m_aArray; // 文本中每行的内容
    /*
     * sPath:文件创建目录
     * sName:文件的名称
     * nDate:数据
     */
    void fnCreateFile(string sPath, string sName, int nDate)
    {
        StreamWriter t_sStreamWriter; // 文件流信息
        FileInfo t_fFileInfo = new FileInfo(sPath + "//" + sName);
        if (!t_fFileInfo.Exists)
        {
            t_sStreamWriter = t_fFileInfo.CreateText();  // 如果此文件不存在则创建
        }
        else
        {
            t_sStreamWriter = t_fFileInfo.AppendText(); // 如果此文件存在则打开
        }
        t_sStreamWriter.WriteLine(nDate); // 以行的形式写入信息
        t_sStreamWriter.Close(); //关闭流
        t_sStreamWriter.Dispose(); // 销毁流
    }
    /*
     * path:读取文件的路径
     * name:读取文件的名称
     */
    ArrayList fnLoadFile(string sPath, string sName)
    {
        StreamReader t_sStreamReader = null; // 使用流的形式读取
        //try
        //{
            t_sStreamReader = File.OpenText(sPath + "//" + sName);
        //}
        //catch (Exception ex)
        //{
        //    return null;
        //}
        string t_sLine; // 每行的内容
        ArrayList t_aArrayList = new ArrayList(); // 容器
        while ((t_sLine = t_sStreamReader.ReadLine()) != null)
        {
            t_aArrayList.Add(t_sLine); // 将每一行的内容存入数组链表容器中
        }
        t_sStreamReader.Close(); // 关闭流
        
        t_sStreamReader.Dispose(); // 销毁流
        
        return t_aArrayList; // 将数组链表容器返回
    }
    /*
     * sPath:删除文件的路径
     * sName:删除文件的名称
     */
    void fnDeleteFile(string sPath, string sName)
    {
        File.Delete(sPath + "//" + sName);
    }
}

 

 

 

 

 

 

 

2016-09-10 11:21:30 u013108312 阅读数 2640
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4645 人正在学习 去看看 张刚

原文路径:http://blog.csdn.net/u013108312/article/details/52493799
新建C#脚本文件:CreateResini,这里没有继承MonoBehaviour

using UnityEngine;
using System.Collections;
using UnityEditor;
using System.IO;
using System.Collections.Generic;

public class CreateResini  
{
    [MenuItem("TestMenu/CreateResIni")]
    public static void Createini()
    {

        Dictionary<string, string> dic = new Dictionary<string, string>();
        string pathRes = Application.dataPath +"/Resources/";
        string pathIni = pathRes + "/res.txt";
        if (File.Exists(pathIni))
        {
            File.Delete(pathIni);
        }

        CreateResInfo(pathRes, ref dic);
        List<string> list = new List<string>();
        foreach(KeyValuePair<string,string> keyValue in dic)
        {
            list.Add(keyValue.Key +"="+keyValue.Value);
        }
        File.WriteAllLines(pathRes +"/res.txt",list.ToArray());
        Log.Debug("生成完毕 ");
        AssetDatabase.Refresh();
    }

    public static void CreateResInfo(string path,ref Dictionary<string,string>dic)
    {
        DirectoryInfo dir = new DirectoryInfo(path);
        if (!dir.Exists)
        {
            return;
        }
        FileInfo[] files = dir.GetFiles();
        for (int i = 0; i < files.Length;i++ )
        {

            FileInfo info = files[i];
            if (!(info.Name.IndexOf(".meta",0) > 0))
            {

                string pathdir = info.FullName.Replace("\\","/")
                    .Replace((Application.dataPath + "/Resources/"), "")
                    .Replace(info.Name, "").TrimEnd('/');
                string fileName = Path.GetFileNameWithoutExtension(info.Name);
                Debug.Log("fileName =" + fileName);
                if (!dic.ContainsKey(info.Name))
                {
                    dic.Add(fileName, pathdir);
                }
                else
                {
                    Log.Error("存在相同的资源名称 名称为:" + info.Name + "/path1=" + dic[info.Name] + "/ path2 =" + pathdir);
                }
            }
        }
        DirectoryInfo[] dirs = dir.GetDirectories();
        if (dirs.Length > 0)
        {
            for (int i = 0; i < dirs.Length;i++ )
            {
                string tempPath = Path.Combine(path, dirs[i].Name);
                CreateResInfo(tempPath, ref dic);
            }
        }
    }
}

原文路径:http://blog.csdn.net/u013108312/article/details/52493799

2015-04-09 18:26:10 qyyl2013 阅读数 819
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4645 人正在学习 去看看 张刚

JSON是一个简单的,但功能强大的序列化数据格式。它定义了简单的类型,如布尔,数(int和float)和字符串,和几个数据结构:list和dictionnary。可以在 http://JSON.org 了解关于JSON的更多信息。

litjson是用C #编写的,它的目的是要小,快速,易用。它使用了Mono框架。

安装LitJSON

将LitJSON编译好的dll文件通过Import New Asset的方式导入到项目中,再使用Using LitJSON即可使用JSONMapper类中的简便方法。dll的下载地址在 这里 .

将JSON转化为Object并可逆向转化

为了在.Net程序中使用JSON格式的数据。一个自然的方法是使用JSON文本生成一个特定的类的一个新实例;为了匹配类的格式,一般存储的JSON字符串是一个字典。

另一方面,为了将对象序列化为JSON字符串,一个简单的导出操作,听起来是个好主意。

为了这个目的,LitJSON包引入了JsonMapper类,它提供了两个用于做到  JSON转化为object 和 object转化为JSON 的主要方法。这两个方法是jsonmapper.toobject和jsonmapper.tojson。

将object转化为字符串之后,我们就可以将这个字符串很方便地在文件中读取和写入了。

一个简单的JsonMapper的例子

在下面的例子中,ToObject方法有一个泛型参数,来指定返回的某种特定的数据类型:即JsonMapper.ToObject<T>。

using LitJson;
using System;

public class Person
{
  // C# 3.0 auto-implemented properties
  public string   Name	 { get; set; }
  public int	  Age	  { get; set; }
  public DateTime Birthday { get; set; }
}

public class JsonSample
{
  public static void Main()
  {
    PersonToJson();
    JsonToPerson();
  }

  public static void PersonToJson()
  {
    Person bill = new Person();

    bill.Name = "William Shakespeare";
    bill.Age  = 51;
    bill.Birthday = new DateTime(1564, 4, 26);

    string json_bill = JsonMapper.ToJson(bill);

    Console.WriteLine(json_bill);
  }

  public static void JsonToPerson()
  {
    string json = @"
      {
        ""Name""	 : ""Thomas More"",
        ""Age""	  : 57,
        ""Birthday"" : ""02/07/1478 00:00:00""
      }";

    Person thomas = JsonMapper.ToObject<Person>(json);

    Console.WriteLine("Thomas' age: {0}", thomas.Age);
  }
}

上文的输出:

{"Name":"William Shakespeare","Age":51,"Birthday":"04/26/1564 00:00:00"}
Thomas' age: 57

使用非泛型的JsonMapper.ToObject

当不存在特定的JSON数据类时,它将返回一个JSONData实例。JSONData是一种通用型可以保存任何数据类型支持JSON,包括list和dictionary。

using LitJson;
using System;

public class JsonSample
{
    public static void Main()
    {
  string json = @"
    {
      ""album"" : {
        ""name""   : ""The Dark Side of the Moon"",
        ""artist"" : ""Pink Floyd"",
        ""year""   : 1973,
        ""tracks"" : [
    ""Speak To Me"",
    ""Breathe"",
    ""On The Run""
        ]
      }
    }
  ";

  LoadAlbumData(json);
    }

    public static void LoadAlbumData(string json_text)
    {
  Console.WriteLine("Reading data from the following JSON string: {0}",
        json_text);

  JsonData data = JsonMapper.ToObject(json_text);

  // Dictionaries are accessed like a hash-table
  Console.WriteLine("Album's name: {0}", data["album"]["name"]);

  // Scalar elements stored in a JsonData instance can be cast to
  // their natural types
  string artist = (string) data["album"]["artist"];
  int    year   = (int) data["album"]["year"];

  Console.WriteLine("Recorded by {0} in {1}", artist, year);

  // Arrays are accessed like regular lists as well
  Console.WriteLine("First track: {0}", data["album"]["tracks"][0]);
    }
}

上面例子的输出:

Reading data from the following JSON string:
          {
            "album" : {
              "name"   : "The Dark Side of the Moon",
              "artist" : "Pink Floyd",
              "year"   : 1973,
              "tracks" : [
                "Speak To Me",
                "Breathe",
                "On The Run"
              ]
            }
          }

Album's name: The Dark Side of the Moon
Recorded by Pink Floyd in 1973
First track: Speak To Me

Reader和Writer

一些人喜欢使用stream的方式处理JSON数据,对于他们, 我们提供的接口是jsonreader和jsonwriter。

JSONMapper实际上是建立在以上两个类的基础上的,所以你可以把这两个类当成是litJSON的底层接口。

使用JsonReader

using LitJson;
using System;

public class DataReader
{
  public static void Main()
  {
    string sample = @"{
      ""name""  : ""Bill"",
      ""age""   : 32,
      ""awake"" : true,
      ""n""	 : 1994.0226,
      ""note""  : [ ""life"", ""is"", ""but"", ""a"", ""dream"" ]
      }";

    PrintJson(sample);
  }

  public static void PrintJson(string json)
  {
    JsonReader reader = new JsonReader(json);

    Console.WriteLine ("{0,14} {1,10} {2,16}", "Token", "Value", "Type");
    Console.WriteLine (new String ('-', 42));

    // The Read() method returns false when there's nothing else to read
    while (reader.Read()) {
      string type = reader.Value != null ?
        reader.Value.GetType().ToString() : "";

      Console.WriteLine("{0,14} {1,10} {2,16}",
                reader.Token, reader.Value, type);
    }
  }
}

输出如下:

Token	  Value			 Type
------------------------------------------
   ObjectStart							
  PropertyName	   name	System.String
    String	   Bill	System.String
  PropertyName		age	System.String
       Int		 32	 System.Int32
  PropertyName	  awake	System.String
     Boolean	   True   System.Boolean
  PropertyName		  n	System.String
    Double  1994.0226	System.Double
  PropertyName	   note	System.String
  ArrayStart							
    String	   life	System.String
    String		 is	System.String
    String		but	System.String
    String		  a	System.String
    String	  dream	System.String
    ArrayEnd							
   ObjectEnd
2015-04-29 19:31:00 OnafioO 阅读数 43
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4645 人正在学习 去看看 张刚

unity3d读写txt

http://www.cnblogs.com/sunet/p/3851353.html?utm_source=tuicool

记录一下昨天用到的技术点:基于android平台unity3d读写txt。功能点主要是单机手游的多账号(帐号对应保存游戏数据)的动态创建与删除、排行榜等功能。将联网版改为单机版之后,本应将用户注册排行功能一并去掉才是的。但我有坑哥的策划,唯有一边心中默念草泥马,一边拼命敲代码了。

       下面将些关键代码粘贴出来,以后不准还有这样的悲情故事发生。

    1、CreateOrOPenFile(Application.persistentDataPath, "Counter.txt", info);

           2、GlobalVariable.counterList = LoadFile(Application.persistentDataPath, "Counter.txt");

    3、创建或者打开txt          

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void CreateOrOPenFile(string path, string name, string info)
  {
 
      StreamWriter sw;
      FileInfo fi = new FileInfo(path + "//" + name);
      if (!fi.Exists)
      {
          sw = fi.CreateText();
      }
      else
      {
          sw = fi.AppendText();
      }
      sw.WriteLine(info);
      sw.Close();
<br>     //其实Close方法内部已经实现了Dispose方法<br>        sw.Dispose();
  }

     4、读取txt文本

复制代码
   List<string> LoadFile(string path, string name)
    {
        StreamReader sr = null;
        try
        {
            sr = File.OpenText(path + "//" + name);
        }
        catch
        {
            return null;
        }
        string lineInfo;
        List<string> lineInfoList = new List<string>();
        while ((lineInfo = sr.ReadLine()) != null)
        {
            lineInfoList.Add(lineInfo);
        }
        sr.Close();
        return lineInfoList;
    }
复制代码

    

    5、修改txt中某一行,觉得自己用这个方法不好,有大牛给点建议?

 

复制代码
    void ConfirmDel(GameObject goName)
    {
        string name = goName.name;
        switch (name)
        {
             //取消删除
            case "CancelButton":
                goDialogPanel.transform.localPosition = new Vector3(1000f, -40f, 0);
                goUIPanel.SetActive(true);
                break;

             //确认删除
case "ConfirmButton": GlobalVariable.counterList.Clear(); GlobalVariable.counterList = LoadFile(Application.persistentDataPath, "Counter.txt"); string nickName = ""; string parName = GlobalVariable.strName; switch (parName) { case "C0": nickName = GlobalVariable.counterList[0].Split(',')[0]; GlobalVariable.counterList.RemoveAt(0); break; case "C1":                //加if判断的原因(其实要结合项目才能理解的):若删除排列中间的某一个,string类型的泛型集合元素的下标已经改变了,但是游戏对象.name还是不变的。所以gameObject对应的原集合的前一个下标即是它现下标
if (GlobalVariable.counterList.Count < 2) { GlobalVariable.counterList.RemoveAt(GlobalVariable.counterList.Count - 1); } else { GlobalVariable.counterList.RemoveAt(1); } nickName = GlobalVariable.counterList[0].Split(',')[0]; break; case "C2": if (GlobalVariable.counterList.Count < 3) { GlobalVariable.counterList.RemoveAt(GlobalVariable.counterList.Count - 1); } else

                 GlobalVariable.counterList.RemoveAt(
2);               }
nickName = GlobalVariable.counterList[0].Split(',')[0]; break; case "C3": if (GlobalVariable.counterList.Count < 4) { GlobalVariable.counterList.RemoveAt(GlobalVariable.counterList.Count - 1); } else GlobalVariable.counterList.RemoveAt(3); nickName = GlobalVariable.counterList[0].Split(',')[0]; break; case "C4": if (GlobalVariable.counterList.Count < 5) { GlobalVariable.counterList.RemoveAt(GlobalVariable.counterList.Count - 1); } else GlobalVariable.counterList.RemoveAt(4); nickName = GlobalVariable.counterList[0].Split(',')[0]; break; default: break; } File.Delete(Application.persistentDataPath + "//" + "Counter.txt"); if (GlobalVariable.counterList.Count != 0) { for (int i = 0; i < GlobalVariable.counterList.Count; i++) {   //重写txt
CreateOrOPenFile(Application.persistentDataPath,
"Counter.txt", GlobalVariable.counterList[i]); } } goDialogPanel.transform.localPosition = new Vector3(1000f, -40f, 0); go.transform.FindChild(GlobalVariable.strName).gameObject.SetActive(false); break; default: break; } if (GlobalVariable.counterList.Count < 5) { goNewCounter.SetActive(true); } else { goNewCounter.SetActive(false); } if (GlobalVariable.counterList == null) { PlayerPrefs.DeleteKey("v"); PlayerPrefs.Save(); } goUIPanel.SetActive(true);
//重新排列
go.GetComponent<UIGrid>().repositionNow = true; }
复制代码
posted @ 2015-04-29 19:31 00000000O 阅读(...) 评论(...) 编辑 收藏
没有更多推荐了,返回首页