【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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
15、AssetDatabase.DeleteAsset删除磁盘资源。
1 void Start() 2 { 3 //删除资源 4 AssetDatabase.DeleteAsset("Assets/folderName2/mat1.mat"); 5 //刷新资源视图 6 AssetDatabase.Refresh(); 7 }
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 }
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 }