zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    char*”类型的值不能用于初始化“LPTSTR , Const char*”类型的值不能用于初始化“LPCTSTR
    LPCTSTR和LPTSTR和char *
    C++ char*,const char*,string的相互转换(转)
    vs2017 开发 C++ 操作mysql的动态库
    VS2017 创建C++Dll动态库(二)
    VS2017中托管C++程序调用托管C++生成的动态库,程序无法调试的问题(转)
    win10 MySQLroot 远程连接
    c++中c_str()的用法详解(转)
    【605】Python的开发环境相关 (不同版本python、pip)
    【604】Python class __dict__.update的使用
  • 原文地址:https://www.cnblogs.com/tekkaman/p/3537701.html
Copyright © 2011-2022 走看看