Unity3D Persistent Storage

Unity3D Persistent Storage

1、PlayerPrefs类以键值对的形式来提供PersistentStorage能力。提供小额存储能力。(做成sst可以提供大规模数据存储)

2、PlayerPrefs删除数据。

3、使用PlayerPrefs实例。

 1     void OnGUI() 
 2     {
 3         GUILayout.BeginHorizontal ("box",GUILayout.Width(200));
 4         
 5         GUILayout.Label ("请输入姓名");
 6         username = GUILayout.TextField(username, 10);
 7         GUILayout.EndHorizontal ();
 8         
 9         GUILayout.BeginHorizontal ("box");
10         GUILayout.Label ("请输入号码");
11         usernumber = GUILayout.TextField(usernumber, 11);
12         GUILayout.EndHorizontal ();
13         
14         GUILayout.BeginHorizontal ("box");
15         GUILayout.Label ("请输入年龄");
16         userage = GUILayout.TextField(userage, 2);
17         GUILayout.EndHorizontal ();
18     
19         GUILayout.BeginHorizontal ("box");
20         GUILayout.Label ("请输入身高");
21         userheight = GUILayout.TextField(userheight, 5);
22         GUILayout.EndHorizontal ();
23         
24         if(GUILayout.Button ("提交数据"))
25         {
26             showInfo = true;
27             //持久化保存数据
28             PlayerPrefs.SetString("username",username);
29             PlayerPrefs.SetString("usernumber",usernumber);
30             PlayerPrefs.SetInt("userage",int.Parse(userage));
31             PlayerPrefs.SetFloat("userheight",float.Parse(userheight));
32         }
33         
34         if(GUILayout.Button ("取消查看"))
35         {
36             showInfo = false;
37             //删除所有持久化对应值
38             PlayerPrefs.DeleteAll();
39         }
40         
41         if(showInfo)
42         {
43             //将信息显示出来,如果找不到对应的值将信息默认值
44             GUILayout.Label ("输入的姓名为:" + PlayerPrefs.GetString("username","姓名默认值"));
45             GUILayout.Label ("输入的号码为:" + PlayerPrefs.GetString("usernumber","号码默认值"));
46             GUILayout.Label ("输入的年龄为:" + PlayerPrefs.GetInt("userage",0).ToString());
47             GUILayout.Label ("输入的身高为:" + PlayerPrefs.GetFloat("userheight",0.0f).ToString());
48         }
View Code

4、使用流进行文件写入操作。

 1     void Start () 
 2     {
 3         //创建文件,共写入3次数据
 4         CreateFile(Application.dataPath,"FileName","TestInfo0");
 5         CreateFile(Application.dataPath,"FileName","TestInfo1");
 6         CreateFile(Application.dataPath,"FileName","TestInfo2");
 7     }
 8     
 9    /**
10    * path:文件创建目录
11    * name:文件的名称
12    * info:写入的内容
13    */
14    void CreateFile(string path,string name,string info)   
15    {   
16          //文件流信息
17       StreamWriter sw;   
18       FileInfo t = new FileInfo(path+"//"+ name);   
19       if(!t.Exists)   
20       {   
21           //如果此文件不存在则创建
22           sw = t.CreateText();
23       }
24       else
25       {
26           //如果此文件存在则打开
27          sw = t.AppendText();
28       }
29       //以行的形式写入信息 
30       sw.WriteLine(info);
31       //关闭流
32       sw.Close();
33       //销毁流
34       sw.Dispose();   
35    }  
View Code

5、使用流进行文件读出操作。

 1     void Start () 
 2     {
 3         //读取文件
 4         ArrayList info = LoadFile(Application.dataPath,"FileName");
 5         
 6         //遍历文本信息,将其打印出来
 7         foreach(string str in info)  
 8         {  
 9             Debug.Log(str);
10         } 
11     }
12 
13    /**
14    * path:读取文件的路径
15    * name:读取文件的名称
16    */
17    ArrayList LoadFile(string path,string name)   
18    {   
19            //使用流的形式读取
20         StreamReader sr =null;
21         try{
22             sr = File.OpenText(path+"//"+ name);  
23         }catch(Exception e)
24         {
25             //路径与名称未找到文件则直接返回空
26             return null;
27         }
28         string line;
29         ArrayList arrlist = new ArrayList();
30          while ((line = sr.ReadLine()) != null)
31         {
32             //一行一行的读取
33             //将每一行的内容存入数组链表容器中
34               arrlist.Add(line);
35          }
36         //关闭流
37         sr.Close(); 
38            //销毁流
39            sr.Dispose();
40         //将数组链表容器返回
41         return arrlist;
42    }   
View Code

6、应用程序状态。

7、使用Application.LoadLevel()可以切换场景,场景ID在File->BukldSetting中定义。

1     void OnGUI()
2     {
3         
4         GUILayout.Label("当前场景名称为:"+Application.loadedLevelName);
5         if(GUILayout.Button("点击进入场景Scene1"))
6         {
7             Application.LoadLevel ("Scene1");
8         }
9     }
View Code

8、使用Application.CaptureScreenshot()可以截图。

 1     void OnGUI()
 2     {
 3         
 4         GUILayout.Label("当前场景名称为:"+Application.loadedLevelName);
 5         
 6         if(GUILayout.Button("点击按钮截图"))
 7         {
 8             Application.CaptureScreenshot("name.png");
 9         }
10     }
View Code

9、Application.OpenURL()方法可以打开网页。会调起第三方应用打开网页。

10、Application.Quit()可退出当前游戏。

11、使用AssertDatabase来加载资源。

 1     //贴图
 2     Texture2D texture;
 3     
 4     void Start()
 5     {
 6         //从项目资源视图中加载资源
 7         texture = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/Texture/0.png", typeof(Texture2D));
 8     }
 9     void OnGUI()
10     {
11         //渲染资源
12         GUI.DrawTexture(new Rect(0,0,texture.width,texture.height),texture);
13     
14     }
View Code

12、动态创建Material,存储在磁盘上。

 1     //贴图对象
 2     Texture2D texture = null;
 3     void Start()
 4     {
 5         //创建一个材质,为默认着色器
 6         Material mat = new Material (Shader.Find("Transparent/Diffuse"));
 7         //在项目资源视图中加载贴图资源
 8         texture = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/Texture/0.png", typeof(Texture2D));
 9         //将贴图资源赋予创建的材质
10         mat.mainTexture = texture;
11            //将材质添加至项目资源视图中
12         AssetDatabase.CreateAsset(mat, "Assets/mat.mat");
13         //创建一个立方体对象
14         GameObject objCube = GameObject.CreatePrimitive(PrimitiveType.Cube);
15         //将创建的材质赋予这个立方体对象
16         objCube.renderer.material = mat;
17     }
View Code

13、使用AssetDatabase.CreateFolder创建文件夹。

 1     //记录添加文件夹的次数
 2     int addId = 0;
 3     void OnGUI()
 4     {
 5         if(GUILayout.Button("添加一个新文件夹"))
 6         {
 7             //得到当前文件夹的名称
 8             string folder  = "folderName"+addId;
 9             //创建一个新文件夹
10             AssetDatabase.CreateFolder("Assets", "folderName"+addId);
11             //创建一个材质,为默认着色器     
12             Material  mat = new Material (Shader.Find("Transparent/Diffuse"));
13             //将材质添加至新文件夹中
14                AssetDatabase.CreateAsset(mat, "Assets/"+folder+"/mat.mat");
15                 
16             addId++;    
17          }
18     }
View Code

14、AssetDatabase.CopyAsset,AssetDatabase.MoveAsset分别用于拷贝和移动磁盘内容。

1     void Start()
2     {
3         //复制资源
4         AssetDatabase.CopyAsset("Assets/folderName1/mat1.mat", "Assets/folderName2/mat1.mat");
5         //移动资源
6         AssetDatabase.MoveAsset("Assets/folderName0/mat0.mat", "Assets/folderName2/mat0.mat");
7     }
View Code

15、AssetDatabase.DeleteAsset删除磁盘资源。

1     void Start()
2     {
3         //删除资源
4         AssetDatabase.DeleteAsset("Assets/folderName2/mat1.mat");
5         //刷新资源视图
6         AssetDatabase.Refresh();
7     }
View Code

 16、OnMouseDrag可以监听到鼠标拖拽消息。

1     void OnMouseDrag () 
2     {
3         Debug.Log("鼠标拖动该模型区域时");
4         transform.position += Vector3.right * Time.deltaTime*Input.GetAxis ("Mouse X");
5         transform.position += Vector3.up * Time.deltaTime*Input.GetAxis ("Mouse Y");
6     }
View Code

17、ScreenPointToRay可以将屏幕坐标转换为世界坐标。

 1         //鼠标按下左键
 2         if(Input.GetMouseButtonDown(0))
 3         {
 4             //创建一条射线以摄像机为原点
 5             Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
 6             RaycastHit hit;
 7             //射线碰撞到游戏地形时
 8             if (Physics.Raycast(ray, out hit))
 9             {
10                 //创建立方体
11                 GameObject objCube = GameObject.CreatePrimitive(PrimitiveType.Cube);
12                 objCube.transform.position = hit.point;
13 
14             }
15         }
View Code
原文地址:https://www.cnblogs.com/tekkaman/p/3537701.html