Unity3D 相关项目代码
一、Application.PresistentDataPath
注意最后面是没有/的
public static string PresistentDataPathForEditor = "C:/Users/Administrator/AppData/LocalLow/DefaultCompany/工程名";
public static string PresistentDataPathForAndroid = "/mnt/sdcard/Android/data/包名/files";
2014-9-24日
有时候我们从Assert Stroe 导入一个包以后,下次创建工程可以再下面看到

这些目录是在 : C:\Users\Administrator\AppData\Roaming\Unity\Asset Store 之下
二、序列化与反序列化
[Serializable]
public class CategoryBean { public string Name;
static string FileName
{
get
{
return Application.persistentDataPath + "/category.dat";
}
} public static void Load() {
Global.Category = new CategoryBean();
if (File.Exists(FileName))
{
try
{
using (FileStream fs = new FileStream(FileName, FileMode.Open, FileAccess.Read))
{
BinaryFormatter b = new BinaryFormatter();
Global.Category = (CategoryBean)b.Deserialize(fs);
}
}
catch (Exception ex)
{
Debuger.Log("Globals.load occurs an error:" + ex);
}
}
else{
Debuger.Log("Local file is null");
}
} public static void Save() {
if (Global.Category == null) return; try
{
using (FileStream fs = new FileStream(FileName, FileMode.Create, FileAccess.Write))
{
BinaryFormatter b = new BinaryFormatter();
b.Serialize(fs, Global.Category);
}
}
catch (Exception ex)
{
Debuger.Log("Globals.Save occurs an error:" + ex);
}
}
}
PS:
1)不能序列化类的静态字段,也不能序列静态类、抽象类和密封类。C#序列化标记只能对实例字段序列号或反序列化。
2)子类可以被序列化或反序列化。但子类的的静态字段仍然遵循1)点。
3)作为其他类中一个字段的类,如果不是静态类,可以被序列化或反序列化,被序列化的类仍然遵循1)。
public class Test : MonoBehaviour
{ public static List<Ser1> Ser1List = new List<Ser1>();
public static string PersistentFileName
{
get
{
return Application.persistentDataPath + "/" + "TEST" + ".dat";
}
} void OnGUI() {
if (GUI.Button(new Rect(, , , ), "SAVE")) {
Ser1.SaveInSerializable();
}
if (GUI.Button(new Rect(, , , ), "LOAD")){
Ser1.LoadFromSerializable();
Debug.Log(Ser1.initstring);
}
if (GUI.Button(new Rect(, , , ), "CHANGE"))
{
Ser1.initstring = "inittest";
Ser1List.Add(new Ser1() { Name = "test1" });
Ser1List.Add(new Ser1() { Name = "test2" });
Ser1List.Add(new Ser1() { Name = "test3" });
}
}
}
[Serializable]
public class Ser1
{
public static string initstring = string.Empty; public string Name; public static void LoadFromSerializable()
{
try
{
if (File.Exists(Test.PersistentFileName))
{
using (FileStream fs = new FileStream(Test.PersistentFileName, FileMode.Open, FileAccess.Read))
{
BinaryFormatter b = new BinaryFormatter();
Test.Ser1List = (List<Ser1>)b.Deserialize(fs);
}
}
}
catch (Exception ex)
{
//Debuger.Log("Globals.load occurs an error:" + ex);
throw new Exception("Globals.load occurs an error:" + ex);
}
} public static void SaveInSerializable( )
{
try
{
using (FileStream fs = new FileStream(Test.PersistentFileName, FileMode.Create, FileAccess.Write))
{
BinaryFormatter b = new BinaryFormatter();
b.Serialize(fs, Test.Ser1List);
}
}
catch (Exception ex)
{
Debuger.Log("Globals.Save occurs an error:" + ex);
}
} }
三、嵌套序列化测试通过
public class Test : MonoBehaviour {
void Awake()
{
MyPerson.Load();
foreach (MyPerson item in Global.MyPersonArray)
{
Debug.Log(item.name);
foreach (Attribute item1 in item.list)
{
Debug.Log(item1.name);
}
}
}
void OnApplicationQuit()
{
MyPerson.Save();
}
}
[Serializable]
public class MyPerson
{
public string name;
public List<Attribute> list = new List<Attribute>();
public MyPerson()
{
name = "test";
list.Add(new Attribute());
list.Add(new Attribute());
}
public static string file = Application.persistentDataPath + "/test.dat";
public static void Load()
{
Global.MyPersonArray = new List<MyPerson>();
Global.MyPersonArray.Add(new MyPerson());
Global.MyPersonArray.Add(new MyPerson());
if (File.Exists(file))
{
try
{
using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read))
{
BinaryFormatter b = new BinaryFormatter();
Global.MyPersonArray = (List<MyPerson>)b.Deserialize(fs);
}
}
catch (Exception ex)
{
Debuger.Log("Globals.load occurs an error:" + ex);
}
}
else
{
Debuger.Log("Local file is null");
}
}
public static void Save()
{
foreach (MyPerson item in Global.MyPersonArray)
{
item.name = "test5";
foreach (Attribute item1 in item.list)
{
item1.name = "Attribute5";
}
}
try
{
using (FileStream fs = new FileStream(file, FileMode.Create, FileAccess.Write))
{
BinaryFormatter b = new BinaryFormatter();
b.Serialize(fs, Global.MyPersonArray);
}
}
catch (Exception ex)
{
Debuger.Log("Globals.Save occurs an error:" + ex);
}
}
}
[Serializable]
public class Attribute
{
public string name;
public Attribute()
{
name = "Attribute";
}
}
四、动态生成赋值
public class Test : MonoBehaviour {
public Test1 tmp;
void Awake() {
Test1 create = Instantiate(tmp) as Test1;
create.test = new GameObject("haha");
}
}
public class Test1 : MonoBehaviour {
public GameObject test;
void Awake() {
//wait test != null
StartCoroutine(Test());
}
IEnumerator Test() {
while (test==null)
{
Debug.Log("now test = = null");
yield return ;
}
Debug.Log("now test ! = null"+test.name);
}
}
五、使用类来作为Dictionary的key
public class Test : MonoBehaviour {
void Awake(){
Dictionary<Model_Links, int> usedLinks = new Dictionary<Model_Links, int>(new MyComparer());
usedLinks.Add(new Model_Links() { id = , title = "title1", body = "boby1" }, );
usedLinks.Add(new Model_Links() { id = , title = "title2", body = "boby2" }, );
usedLinks.Add(new Model_Links() { id = , title = "title3", body = "boby3" }, );
usedLinks.Add(new Model_Links() { id = , title = "title4", body = "boby4" }, );
//对比的类
Model_Links test = new Model_Links() { id = , title = "title2", body = "boby1" };
//测试是否存在
Debug.Log(usedLinks.ContainsKey(test));
}
}
public partial class Model_Links
{
public int id { get; set; }
public string title { get; set; }
public string body { get; set; }
}
public class MyComparer : IEqualityComparer<Model_Links>
{
public bool Equals(Model_Links x, Model_Links y)
{
return x.id == y.id && x.title == y.title && x.body == y.body;
}
public int GetHashCode(Model_Links obj)
{
return obj.id.GetHashCode() ^ obj.title.GetHashCode() ^ obj.body.GetHashCode();
}
}
六、文件流操作提醒
if (!File.Exists(Global.VersionLogFileName)) {
//Debuger.Log("first time");
FileStream fs = File.Create(Global.VersionLogFileName);
//这里要记得关闭这个流,不然的话如果之后由写入操作会引发IO 异常
fs.Close();
return null;
}
七、typeof(T) 与 GetType()的区别
简明表达区别:
同点:两者都是返回类型Type
异同:typeof(T),该T,就是一个类型如:class A{},定义了一个A类,如果想获取该A的Type值,就直接typeof(A)即可。
而GetType()是这样的,class A{},定义了一个A类,定对A类实例化成一个a: A a = new A();这时如果想获取该a的Type值,就直接用a的.GetType()即可。如:a.GetType();
所以用GetType之前必须实例化
八、
/// <summary>
/// 判断输入的字符串是否只包含数字和英文字母
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static bool IsNumAndEnCh(string input)
{
string pattern = @"^[A-Za-z0-9]+$";
Regex regex = new Regex(pattern);
return regex.IsMatch(input);
}
Unity3D 相关项目代码的更多相关文章
- .NET 项目代码风格要求
原文:http://kb.cnblogs.com/page/179593/ 项目代码风格要求 PDF版下载:项目代码风格要求V1.0.pdf 代码风格没有正确与否,重要的是整齐划一,这是我拟的一份&l ...
- [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(4)
这个系列已经写了6篇,链接地址如下: [Asp.net 5] DependencyInjection项目代码分析 [Asp.net 5] DependencyInjection项目代码分析2-Auto ...
- 循序渐进开发WinForm项目(2)--项目代码的分析
随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了. 其实也许我 ...
- .Net 项目代码风格要求小结
代码风格没有正确与否,重要的是整齐划一,这是我拟的一份<.Net 项目代码风格要求>,供大家参考. 1. C# 代码风格要求1.1注释 类型.属性.事件.方法.方法参数,根据需要添加注释. ...
- .NET之美——.Net 项目代码风格要求
.Net 项目代码风格要求 PDF版下载:项目代码风格要求V1.0.pdf 代码风格没有正确与否,重要的是整齐划一,这是我拟的一份<.Net 项目代码风格要求>,供大家参考. 1. C# ...
- Unity3d 合作开发项目
Unity3d 合作开发项目 交流群:63438968 本人:灰太龙 项目的合作开发是至关重要的,第一个问题就是自适应分辨率的问题! 综合考虑了一下,我们采用了IGUI插件,这个插件有以下几 ...
- C#项目代码风格要求(转)
代码风格没有正确与否,重要的是整齐划一,这是我拟的一份<项目代码风格要求>,供大家参考. PDF版下载:项目代码风格要求V1.0.pdf 1. C# 代码风格要求 1.1注释 类型.属性. ...
- Net 项目代码风格
.Net 项目代码风格要求 .Net 项目代码风格要求 PDF版下载:项目代码风格要求V1.0.pdf 代码风格没有正确与否,重要的是整齐划一,这是我拟的一份<.Net 项目代码风格要求&g ...
- Webpack 2 视频教程 017 - Webpack 2 中分离打包项目代码与组件代码
原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...
随机推荐
- SQL 建表与查询 HTML计算时间差
create database xue1 go --创建数据库 use xue1 go --引用数据库 create table xinxi ( code int, name ), xuehao ), ...
- struts2,hibernate4,spring3配置时问题汇总及解决办法
文章转载于wanglihu的博客,原文链接http://wanglihu.iteye.com/blog/1897718 1.java.lang.NoClassDefFoundError: org/ob ...
- CityEngine2012(32位)安装
今天下午把CityEngine2012装好了,既然Esri大力推CityEngine作为其三维建模软件,那就学习一下,还好没花多长时间搞定破解版,以前装Erdas,南方CASS,AutoCAD那些该死 ...
- 一步一步学习C++
根据<C++ primer>第五版 总结学习心得. 在实践中,不必全面地使用C++语言的各种特性,而应根据工程的实际情况,适当取舍(譬如动态类型信息,虚拟继承.异常等特性的使用,很值得商榷 ...
- C++模板实例化(1)
On-Demand实例化 当C++编译器遇到模板特化的时候,他会利用所给的实参替换对应的模板参数,从而产生该模板的特化.该过程是自动进行的.有时候也会被称为隐式实例化,或者是自动实例化. on-dem ...
- FIR滤波器(1)- 基础知识
FIR滤波器广泛应用于数字信号处理中,主要功能就是将不感兴趣的信号滤除,留下有用信号.FIR滤波器是全零点结构,系统永远稳定:并且具有线性相位的特征,在有效频率范围内所有信号相位上不失真.在无线通信收 ...
- jQuery: 图片不完全按比例自动缩小
有时我们会有这样的需求:让图片显示在固定大小的区域.如果不考虑 IE6 完全可以使用 css 的 max-width 限制宽度自动按比例缩小显示,但是这样有个问题,就是如果按比例缩小后,图片高度不够, ...
- 优化C++程序编译效率的一些方法
优化是一件非常重要的事情.作为一个程序设计者,你肯定希望自己的程序既小又快.DOS时代的许多书中都提到,“某某编译器能够生成非常紧凑的代码”,换言之,编译器会为你把代码尽可能地缩减,如果你能够正确地使 ...
- ActiveMQ之deliveryMode
在下面的例子中,分别发送一个Persistent和nonpersistent的消息,然后关闭退出JMS. import javax.jms.Connection;import javax.jms.De ...
- HDFS命令行操作
启动后可通过命令行使用hadoop. (1)所有命令 (先将$HADOOP_HOME/bin加入到.bashrc的$PATH变量中) [html] view plaincopy [hadoop@nod ...