Unity3D开发——LeRunning商店系统的实现

/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);

点下兑换按钮,我们要相应的做出显示的变化以及存储数据,这样就好了,帅吧;,今天就这样了,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值