1、PlayerPrefs类(生命周期???)1.1 保存与读取数据在C#中类似缓存、Cookie、Session等保存数据的,但是有点区别的是在C#中如果在取值时没有取到默认值则返回值是NULL,但Unity中如GetInt("Test", 100); 在取值Test时如果没有默认值则直接返回的是100; 在Unity中提供了一个用于本地持久化保存与读取数据的类——PlayerPrefs 是轻量级的存储。它的工作原理是以哈希、字典的方式:键值对的形式将数据保存在文件中。 PlayerPrefs类可保存与读取3种基本的数据类型:浮点型、整型和字符串型。 SetFloat():保存浮点类型。 SetInt():保存整型。 SetString():保存字符串。 GetFloat():获取浮点类型。 GetInt():获取整型。 GetString():获取字符串。 Eg: //保存整型 PlayerPrefs.SetInt("Test", 100); //获取整型 PlayerPrefs.GetInt("Test", 100);
1.2 删除数据删除数据方法: a、根据键删除值:DeleteKey(),删除之前先判断是否存在HasKey()
b、删除所有数据:DeleteAll()
1.3 注册界面_8_1.cs using UnityEngine; using System.Collections; /// <summary> /// 注册 /// </summary> public class _8_1 : MonoBehaviour { /// <summary> /// 用户姓名 /// </summary> private string userName = string.Empty; /// <summary> /// 用户号码 /// </summary> private string userPhone = string.Empty; /// <summary> /// 用户年龄 /// </summary> private string userAge = string.Empty; /// <summary> /// 用户身高 /// </summary> private string userHight = string.Empty; /// <summary> /// 是否将信息显示 /// </summary> private bool isShowInfo = false; void OnGUI() { GUILayout.BeginHorizontal("box", GUILayout.Width(200)); GUILayout.Label("请输入姓名"); userName = GUILayout.TextField(userName, 10); GUILayout.EndHorizontal();// [h?r?'z?nt(?)l]adj. 水平的;地平线的;同一阶层的 GUILayout.BeginHorizontal("box"); GUILayout.Label("请输入号码"); userPhone = GUILayout.TextField(userPhone, 11); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal("box"); GUILayout.Label("请输入年龄"); userAge = GUILayout.TextField(userAge, 3); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal("box"); GUILayout.Label("请输入身高"); userHight = GUILayout.TextField(userHight, 3); GUILayout.EndHorizontal(); if (GUILayout.Button("注册")) { isShowInfo = true; #region 持久化保存数据 PlayerPrefs.SetString("userName", userName); PlayerPrefs.SetString("userPhone", userPhone); PlayerPrefs.SetInt("userAge", int.Parse(userAge)); PlayerPrefs.SetFloat("userHeight", float.Parse(userHight)); #endregion } if (GUILayout.Button("取消")) { isShowInfo = false; PlayerPrefs.DeleteAll();//删除所有持久化对应值 } if (isShowInfo) { GUILayout.Label("输入的姓名为:" + PlayerPrefs.GetString("userName", "姓名默认值")); GUILayout.Label("输入的号码为:" + PlayerPrefs.GetString("userPhone", "号码默认值")); GUILayout.Label("输入的年龄为:" + PlayerPrefs.GetInt("userAge", 0).ToString()); GUILayout.Label("输入的身高为:" + PlayerPrefs.GetFloat("userHeight", 0.0f).ToString()); } } // Use this for initialization void Start() { } // Update is called once per frame void Update() { } }
2 自定义文件2.1 文件的创建与写入文件的创建与写入都需要使用流来操作。 _8_2.cs using UnityEngine; using System.Collections; using System.IO; /// <summary> /// 文件的创建与写入 /// </summary> public class _8_2 : MonoBehaviour { // Use this for initialization void Start() { //创建文件,共写入3次数据 CreateFile(Application.dataPath, "FileName", "TestInfo0"); CreateFile(Application.dataPath, "FileName", "TestInfo1"); CreateFile(Application.dataPath, "FileName", "TestInfo2"); } /// <summary> /// 文件流 /// </summary> /// <param name="path">文件创建目录</param> /// <param name="name">文件的名称</param> /// <param name="infos">写入的内容</param> void CreateFile(string path, string name, string infos) { StreamWriter sw;//文件流信息 FileInfo fileInfo = new FileInfo(path + "//" + name); if (!fileInfo.Exists) { sw = fileInfo.CreateText(); } else { sw = fileInfo.AppendText();//如果此文件存在,则打开该文件 } sw.WriteLine(infos); sw.Close(); sw.Dispose(); } // Update is called once per frame void Update() { } }
3 应用程序应用程序相关的方法都写在Application类中。它可以获取或设置当前程序的一些属性,比如加载游戏关卡,获取资源文件路径,退出当前游戏程序,获取当前游戏平台等。 OnApplicationFocus():获得焦点时表示当前游戏处于可控制状态。 OnApplicationPause():程序暂停时表示当前游戏呈不可控制状态。 [p??z]n. 暂停;间歇 OnApplicationQuit():程序退出时表示当前游戏已经退出。 3.1 创建关卡“File”→“New Scene”菜单项创建一个新关卡(同一个游戏项目中可以存在任意数量的游戏关卡) 3.2 切换关卡“File”→“Build Settings”,点击右下角的“Add Current”按钮可为当前游戏关卡授权,右侧数字为关卡的ID,ID为0的关卡表示程序运行时第一个进入的场景 3.3截屏截屏操作需调用方法Application.CaptureScreenshot("name.png"),该方法的参数为截屏图片的文件名称,成功截屏后该文件将被默认保存在根目录下。 ['k?pt??]vt. 俘获;夺得 n. 捕获;战利品, 3.4 打开网页Application.OpenURL(“www.baidu.com”) 参数为待打开网页的完整网址
3.5 退出游戏Application.Quit()方法即可退出当前游戏。需要注意的是,该方法只能在真实设备中执行,而无法在模拟器中执行。
4、资源数据库AssetDatabase 4.7 实例——鼠标拣选
using UnityEngine; using System.Collections; /// <summary> /// 以摄像机的位置为原点,以鼠标在屏幕中选择的当前点为目标点,发射一条射线,获取这条射线终点的三维坐标系即可 /// 鼠标拣选原理的应用非常广泛,比如当玩家在地图中选择一个点时,人物会朝该点移动 /// </summary> public class _8_4 : MonoBehaviour { // Use this for initialization void Start() { } // Update is called once per frame void Update() { if (Input.GetMouseButtonDown(0)) { ////创建一条从摄像机到鼠标选择的当前点的射线 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { //确定选择的点为地形后,创建立方体对象 GameObject objCube = GameObject.CreatePrimitive(PrimitiveType.Cube); objCube.transform.position = hit.point; } } } }
_8_4.cs |
|