/////////////////////2015/08/22//////////////////////
////////////////////by xbw////////////////////////////
///////////////////环境 unity 4.6.1///////////////
今天又挤出一点时间来,继续写一下那个项目的内容,关于这个商店系统,在这个游戏中,实现了简单的轮胎兑换金币,也是用到了unity自带的数据库,真心好用呢,下面就详细说一下;
首先呢,轮胎哪来的呢,就是在游戏中我们的猪脚在躲避障碍的同时在收集轮胎,没一局的金币数量都可以累计,用的就是数据库呢,这样,我们在游戏轮胎数量显示的地方添加纪录游戏轮胎数增加的语句,
GUI.Label(new Rect(Screen.width * 0.85f, Screen.height * 0.01f, 0, 0), Mathf.Round(TotalDistance).ToString() + " M",bb); //Place the distance count on the top right of the screen GUI.DrawTexture(new Rect(Screen.width * 0.90f, Screen.height * 0.15f, Screen.width * 0.07f, Screen.width * 0.07f), Gems); //Place the gem image beside the gems count on the top right of the screen GUI.Label(new Rect(Screen.width * 0.85f, Screen.height * 0.17f, 0f, 0f), m_player.m_score.ToString(),bb); //Place the gems count on the top right of the screen quanju.lun = m_player.m_score;
这一句quanju.lun = m_player.m_score;用的是全局变量,把轮胎的个数记录在全局变量中,这样不管在哪个脚本中,我们都可以使用这个变量了,不错吧,没有看到数据库的语句吧,我也没看到,再找找,再另一个脚本呢,我的End脚本,之前专家说游戏没有结束,这样一来增加了end游戏实现了结束模块,看一下代码吧
using UnityEngine; using System.Collections; public class End : MonoBehaviour { //This script handles the leveling up in the game and the score and distance records. In each level up the value ranges for platforms are changed ( platform length/height/width/rotate etc ) protected mishuzengjia m_player; internal GameObject Player; //Used to hold the player object, if it's in the scene public GUISkin GUIskin; //The skin gui we'll use internal float TotalDistance = 0; //The total distance passed by the player public Texture2D Gems; public Texture2D img; public AudioClip CrashSound; private AudioSource _audioSource; //public int right = 1; public GUISkin GUIskin2; //public Texture2D Stop; //public int stop = 1; //public int jieshu; void Awake() { _audioSource = this.gameObject.AddComponent<AudioSource>(); _audioSource.loop = false; _audioSource.volume = 1.0f; _audioSource.pitch = 1.0f; } void Start() { Player = GameObject.FindWithTag("Player"); //Find the player in the scene and put it in a variable, for later use _audioSource.PlayOneShot(CrashSound); GameObject obj = GameObject.FindGameObjectWithTag("Player"); if (obj != null) { m_player = obj.GetComponent<mishuzengjia>(); } } //public void EndLevel() //{ // PlayerPrefs.SetInt("TotalDistance", (int)TotalDistance); //Put the value of TotalDistance in a playerPref record which will keep this value even after going to a different level or even quitting the game // StartCoroutine(WaitAndDelay(2.0f)); // Application.LoadLevel("end"); //Load the end screenm, which has total score displayed and a menu //} //IEnumerator WaitAndDelay(float waitTime) //{ // yield return new WaitForSeconds(waitTime); //} void OnGUI() { //The skin gui we'll use //GUIStyle aa = new GUIStyle(); //aa.fontSize = 40; //aa.normal.textColor = new Color(255, 255, 255); GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), img); GUI.skin = GUIskin; GUIStyle bb1 = new GUIStyle(); bb1.fontSize = 40; bb1.normal.textColor = new Color(0, 0, 0); GUI.Label(new Rect(Screen.width * 0.4f, Screen.height * 0.25f, 0, 0),"最终距离 : "+ quanju.mishu.ToString() + " M", bb1); GUI.DrawTexture(new Rect(Screen.width * 0.64f, Screen.height * 0.34f, Screen.width * 0.07f, Screen.width * 0.07f), Gems); //Place the gem image beside the gems count on the top right of the screen GUI.Label(new Rect(Screen.width * 0.4f, Screen.height * 0.4f, 0f, 0f), "收集轮胎 : "+quanju.lun.ToString(), bb1); //GUI.Label(new Rect(Screen.width * 0.5f + 160, Screen.height * 0.3f, 0, 0), "恭喜获得四枚玲珑轮胎"); GUI.Label(new Rect(Screen.width * 0.5f, Screen.height * 0.5f, 0, 0), "游戏结束", bb1); PlayerPrefs.SetInt("LunTai", quanju.LunTotal); quanju.LunTotal = PlayerPrefs.GetInt("LunTai"); //Time.timeScale = 0; GUI.skin = GUIskin2; if (GUI.Button(new Rect(Screen.width * 0.45f, Screen.height * 0.6f, Screen.width * 0.2f, Screen.height * 0.1f), "再试一次")) { quanju.LunTotal += quanju.lun; PlayerPrefs.SetInt("LunTai", quanju.LunTotal); Time.timeScale = 1; Application.LoadLevel("choose"); } if (GUI.Button(new Rect(Screen.width * 0.45f, Screen.height * 0.8f, Screen.width * 0.2f, Screen.height * 0.1f), "退出游戏")) { quanju.LunTotal += quanju.lun; PlayerPrefs.SetInt("LunTai", quanju.LunTotal); Application.Quit(); } if (GUI.Button(new Rect(Screen.width * 0.45f, Screen.height * 0.7f, Screen.width * 0.2f, Screen.height * 0.1f), "返回主菜单")) { quanju.LunTotal += quanju.lun; PlayerPrefs.SetInt("LunTai", quanju.LunTotal); Time.timeScale = 1; Application.LoadLevel("first"); } } void Update() { } }
PlayerPrefs.SetInt("LunTai", quanju.LunTotal);
quanju.LunTotal = PlayerPrefs.GetInt("LunTai");
重点这两句话,实现了对这个轮胎个数数据的读取,然后再存储
if (GUI.Button(new Rect(Screen.width * 0.45f, Screen.height * 0.6f, Screen.width * 0.2f, Screen.height * 0.1f), "再试一次")) { quanju.LunTotal += quanju.lun; PlayerPrefs.SetInt("LunTai", quanju.LunTotal); Time.timeScale = 1; Application.LoadLevel("choose"); } if (GUI.Button(new Rect(Screen.width * 0.45f, Screen.height * 0.8f, Screen.width * 0.2f, Screen.height * 0.1f), "退出游戏")) { quanju.LunTotal += quanju.lun; PlayerPrefs.SetInt("LunTai", quanju.LunTotal); Application.Quit(); } if (GUI.Button(new Rect(Screen.width * 0.45f, Screen.height * 0.7f, Screen.width * 0.2f, Screen.height * 0.1f), "返回主菜单")) { quanju.LunTotal += quanju.lun; PlayerPrefs.SetInt("LunTai", quanju.LunTotal); Time.timeScale = 1; Application.LoadLevel("first"); }
就是点击了按钮才会存储呢,
PlayerPrefs.SetInt("LunTai", quanju.LunTotal);
quanju.LunTotal = PlayerPrefs.GetInt("LunTai");这是unity自带的数据库功能,真的好方便,
这样这个轮胎的个数就能很好的记录下来了,就算是重新启动游戏数据也不会丢失的,所以我们就可以有了新游戏模式跟游戏回顾模式,是不是很高大上呢,至于怎么实现,我想大家都很清楚,新游戏模式就是点击后清除所有数据,然后进入游戏场景,
if (GUI.Button(new Rect(playButton), "新游戏")) { audio.PlayOneShot(beep); //menuPage = "main"; PlayerPrefs.DeleteAll(); Application.LoadLevel("choose"); }
PlayerPrefs.DeleteAll();这一句就是unity自带的数据库的清除数据的语句,当然也很方便啦;
游戏回顾模式就是直接进入游戏场景就好啦;
说了半天还没到游戏商店呢,先上个图吧;
这个就是商店啦,不过是用了点GUI的输入输出罢了,我们的比例是1:500;嘿嘿,都是用了数据库,直接上大片代码,是不是很爽呢;
using UnityEngine; using System.Collections; public class shangdian : MonoBehaviour { public GUISkin GUIskin; public Texture2D img; public Texture2D jinbi; public Texture2D luntai; public string FromText = ""; private int number; // Use this for initialization void Start () { } // Update is called once per frame void Update () { } void OnGUI() { GUI.skin = GUIskin; GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), img); if(quanju.shangdian==1) { GUIStyle bb1 = new GUIStyle(); bb1.fontSize = 40; bb1.normal.textColor = new Color(0, 0, 0); GUI.Label(new Rect(Screen.width * 0.185f, Screen.height * 0.44f, 0, 0), "输入个数: ", bb1); FromText = GUI.TextField(new Rect(Screen.width * 0.31f, Screen.height * 0.44f, Screen.width * 0.1f, Screen.height * 0.08f), FromText,bb1); int.TryParse(FromText, out number); GUI.Label(new Rect(Screen.width * 0.69f, Screen.height * 0.44f, 0, 0), "获取: "+ (number*500).ToString(), bb1); GUI.DrawTexture(new Rect(Screen.width * 0.05f, Screen.height * 0.29f, Screen.width * 0.5f, Screen.height * 0.6f), jinbi); GUI.DrawTexture(new Rect(Screen.width * 0.55f, Screen.height * 0.29f, Screen.width * 0.5f, Screen.height * 0.6f), luntai); PlayerPrefs.SetInt("LunTai", quanju.LunTotal); quanju.LunTotal = PlayerPrefs.GetInt("LunTai"); PlayerPrefs.SetInt("JinBi", quanju.JinTotal); quanju.JinTotal = PlayerPrefs.GetInt("JinBi"); GUI.Label(new Rect(Screen.width * 0.1f, Screen.height * 0.2f, 0, 0), "拥有轮胎: " + quanju.LunTotal.ToString(), bb1); GUI.Label(new Rect(Screen.width * 0.6f, Screen.height * 0.2f, 0, 0), "拥有金币: " + quanju.JinTotal.ToString(), bb1); if (GUI.Button(new Rect(Screen.width * 0.42f, Screen.height * 0.7f, Screen.width * 0.2f, Screen.height * 0.1f), "确认兑换")) { if (quanju.LunTotal<number) { } else { quanju.LunTotal = quanju.LunTotal - number; PlayerPrefs.SetInt("LunTai", quanju.LunTotal); quanju.JinTotal = quanju.JinTotal + number * 500; PlayerPrefs.SetInt("JinBi", quanju.JinTotal); } } if (GUI.Button(new Rect(Screen.width * 0.42f, Screen.height * 0.8f, Screen.width * 0.2f, Screen.height * 0.1f), "返回")) { Application.LoadLevel("choose"); quanju.shangdian = 0; } } if(quanju.shangdian==2) { if (GUI.Button(new Rect(Screen.width * 0.42f, Screen.height * 0.3f, Screen.width * 0.2f, Screen.height * 0.3f), "只能通过游戏"+"\n"+"获取轮胎")) { } if (GUI.Button(new Rect(Screen.width * 0.42f, Screen.height * 0.7f, Screen.width * 0.2f, Screen.height * 0.1f), "返回")) { Application.LoadLevel("choose"); quanju.shangdian = 0; } } //GUIStyle bb1 = new GUIStyle(); //bb1.fontSize = 30; //bb1.normal.textColor = new Color(0, 0, 0); //quanju.LunTotal = PlayerPrefs.GetInt("LunTai"); //GUI.Label(new Rect(Screen.width * 0.5f, Screen.height * 0.5f, 0, 0), "轮胎个数" + "\n" + quanju.LunTotal.ToString() + " 个",bb1); } }
FromText = GUI.TextField(new Rect(Screen.width * 0.31f, Screen.height * 0.44f, Screen.width * 0.1f, Screen.height * 0.08f), FromText,bb1);
在这之前呢,我们public了一个FormText,不是我不想直接定义整型,是GUI的输入估计只能是字符等,这样呢,只能是String了,这样呢,我就需要字符转整型了,
int.TryParse(FromText, out number);
unity中的字符转整型是这样用的,估计是其中一种用法,应该还用很多种方法,然而整型转字符型却很简单,直接是整型.ToString();是不是很爽,这样呢,我们就可以直接用number了,
quanju.LunTotal = quanju.LunTotal - number;
PlayerPrefs.SetInt("LunTai", quanju.LunTotal);
quanju.JinTotal = quanju.JinTotal + number * 500;
PlayerPrefs.SetInt("JinBi", quanju.JinTotal);
点下兑换按钮,我们要相应的做出显示的变化以及存储数据,这样就好了,帅吧;,今天就这样了,