1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 【游戏案例学习】涂鸦跳跳笔记

【游戏案例学习】涂鸦跳跳笔记

时间:2020-11-09 17:39:09

相关推荐

【游戏案例学习】涂鸦跳跳笔记

涂鸦跳跳

player.csBullet.csPowerUp.cs 玩家吃了特殊物品可以加速飞Tile.cs 实例化小砖块Enemy.cs敌人Coin.cs金币单例GameManager.csGameSetting.csMusicManager.csSkinManager.csSoundManager.csUIGUIManager.csUI_GameOver.csUI_InGame.csUI_Main.csUI_Pause.csUI_Skin.cs

player.cs

using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.EventSystems;/// <summary>/// 玩家/// </summary>public class Player : MonoBehaviour {/// <summary>/// 左右边界/// </summary>float rightBorder;float leftBorder;SpriteRenderer sp;public Sprite fire;//public Sprite normal;// Use this for initializationvoid Start () {leftBorder = Camera.main.ViewportToWorldPoint(new Vector3(0, 0)).x;rightBorder = Camera.main.ViewportToWorldPoint(new Vector3(1, 0)).x;sp = GetComponent<SpriteRenderer>();GameManager.Instance.SelectSkin();}// Update is called once per framevoid Update () {if (GameManager.Instance.gamestate == GameState.RUNNING){//移动Vector3 acc = Vector3.zero;Vector3 diff;if (Input.GetKey(KeyCode.LeftArrow)){acc.x = -0.1f;transform.localScale = new Vector3(-1, 1, 1);//角色反转}if (Input.GetKey(KeyCode.RightArrow)){transform.localScale = new Vector3(1, 1, 1);acc.x = 0.1f;}diff = Vector3.MoveTowards(transform.localPosition, transform.localPosition + acc, 0.5f * Time.time);diff.y = transform.localPosition.y;diff.z = 0;//设置边界if (diff.x < leftBorder){diff.x = rightBorder;}if (diff.x > rightBorder){diff.x = leftBorder;}transform.localPosition = diff;//发射子弹 防穿透if (Input.GetMouseButtonDown(0) && !EventSystem.current.IsPointerOverGameObject()){GameManager.Instance.GetInactiveObject(ObjectType.Bullet);sp.sprite = fire;}if (Input.GetMouseButtonUp(0)){//之后换掉//sp.sprite = normal;GameManager.Instance.SelectSkin();}}}private void OnTriggerEnter2D(Collider2D collision){if(collision.tag == "Platform")Jump(1);if(collision.tag == "Floor") GameManager.Instance.EndGame();}/// <summary>/// 弹跳/// </summary>/// <param name="x"></param>public void Jump(float x){if (GameManager.Instance.gamestate == GameState.GAMEOVRE)return;GetComponent<Rigidbody2D>().velocity = Vector2.zero;//每次跳跃速度清零,可以保证每次的速度都是一样的。GetComponent<Rigidbody2D>().AddForce(new Vector2(0, 12 * x), ForceMode2D.Impulse);//增加一个向上的瞬间力//弹跳音效SoundManager.Instance.PlaySFX(5);}}

Bullet.cs

using System.Collections;using System.Collections.Generic;using UnityEngine;public class Bullet : MonoBehaviour {private void OnEnable(){GetComponent<Rigidbody2D>().velocity = Vector2.zero;GetComponent<Rigidbody2D>().AddForce(new Vector2(0, 12 ), ForceMode2D.Impulse);}private void Update(){if (GameManager.Instance.floor.transform.position.y > transform.position.y + 1)GameManager.Instance.AddInActiveObjectToPool(gameObject, ObjectType.Bullet);}}

PowerUp.cs 玩家吃了特殊物品可以加速飞

using System.Collections;using System.Collections.Generic;using UnityEngine;/// <summary>/// 掉落物品/// </summary>public class PowerUp : MonoBehaviour{public int itemType;[HideInInspector]public SpriteRenderer sp;//item 图片public Sprite[] sprites;//技能时间public float[] powerTime;//技能释放图片public GameObject[] used;GameObject player;bool fly;private void OnEnable(){Init();}void Init(){sp.enabled = true;itemType = int.Parse(gameObject.name);sp.sprite = sprites[itemType];fly = false;}private void OnTriggerEnter2D(Collider2D collision){if (collision.tag == "Player"){player = collision.gameObject;//隐藏sp.enabled = false;//速度wei0player.GetComponent<Rigidbody2D>().velocity = Vector2.zero;//重力不影响player.GetComponent<Rigidbody2D>().isKinematic = true;//无敌player.GetComponent<BoxCollider2D>().enabled = false;//显示图片used[itemType].SetActive(true);//flyfly = true;StartCoroutine("StopFly");//音效SoundManager.Instance.PlaySFX(3);}}IEnumerator StopFly(){yield return new WaitForSeconds(powerTime[itemType]);player.GetComponent<Rigidbody2D>().isKinematic = false;player.GetComponent<BoxCollider2D>().enabled = true;used[itemType].SetActive(false);fly = false;//停止杂音SoundManager.Instance.StopSFX();}private void Update(){if (fly)player.transform.Translate(new Vector2(0, 12 * Time.deltaTime));else if (GameManager.Instance.floor.transform.position.y > transform.position.y + 1)GameManager.Instance.AddInActiveObjectToPool(gameObject, ObjectType.Item);}}

Tile.cs 实例化小砖块

using System.Collections;using System.Collections.Generic;using UnityEngine;/// <summary>/// 小砖块/// </summary>public class Tile : MonoBehaviour {public int tileType;public Sprite[] sprites;SpriteRenderer sp;float speed;float distance;Vector3 startPos;int direction; // 0 left 1 right // 0 up 1 downprivate void OnEnable(){Init();}void Init(){sp = GetComponent<SpriteRenderer>();tileType = int.Parse(gameObject.name);switch (tileType){case 0:sp.sprite = sprites[0];break;case 1:sp.sprite = sprites[1];break;case 2:sp.sprite = sprites[2];break;case 3:sp.sprite = sprites[3];break;case 4: //MovingHorizontally 4sp.sprite = sprites[4];speed = GameManager.Instance.Advance.movingHorizontally.speed;distance = GameManager.Instance.Advance.movingHorizontally.distance;startPos = transform.position;break;case 5: //MovingVertically 5sp.sprite = sprites[5];speed = GameManager.Instance.Advance.movingVertically.speed;distance = GameManager.Instance.Advance.movingVertically.distance;startPos = transform.position;break;default:break;}}private void Update(){switch (tileType){case 4://MovingHorizontally 4if(direction == 0) //left{transform.Translate(new Vector2(-speed * Time.deltaTime, 0));if (startPos.x - transform.position.x > distance)direction = 1;}else{transform.Translate(new Vector2(speed * Time.deltaTime, 0));if (startPos.x - transform.position.x < -distance)direction = 0;}break;case 5://MovingVertically 5if (direction == 0) //left{transform.Translate(new Vector2(0,-speed * Time.deltaTime));if (startPos.y - transform.position.y > distance)direction = 1;}else{transform.Translate(new Vector2(0,speed * Time.deltaTime));if (startPos.y - transform.position.y < -distance)direction = 0;}break;default:break;}if (GameManager.Instance.floor.transform.position.y > transform.position.y + 1){GetComponent<Rigidbody2D>().gravityScale = 0f;GameManager.Instance.AddInActiveObjectToPool(gameObject,ObjectType.Tile);}}private void OnTriggerEnter2D(Collider2D collision){//速度小于等于0才可以弹跳if(collision.tag == "Player" && collision.GetComponent<Rigidbody2D>().velocity.y <= 0){//NormalTile 0//BrokenTile 1//OneTimeOnly 2//SpringTile 3//MovingHorizontally 4//MovingVertically 5switch (tileType){case 0:collision.GetComponent<Player>().Jump(1);break;case 1:GetComponent<Rigidbody2D>().gravityScale = 1.5f;SoundManager.Instance.PlaySFX(6);break;case 2:collision.GetComponent<Player>().Jump(1);GetComponent<Rigidbody2D>().gravityScale = 1.5f;break;case 3:collision.GetComponent<Player>().Jump(1.5f);break;case 4:collision.GetComponent<Player>().Jump(1);break;case 5:collision.GetComponent<Player>().Jump(1);break;default:break;}}}}

Enemy.cs敌人

using System.Collections;using System.Collections.Generic;using UnityEngine;public class Enemy : MonoBehaviour {float speed;float distance;Vector3 startPos;int direction; // 0 left 1 right public float[] Speed;public float[] Distance;public Sprite[] sprites;int enmeyType;SpriteRenderer sp;private void Update(){if (direction == 0) //left{transform.Translate(new Vector2(-speed * Time.deltaTime, 0));if (startPos.x - transform.position.x > distance){transform.localScale = new Vector3(transform.localScale.x *(-1), transform.localScale.y, transform.localScale.z);direction = 1;}}else{transform.Translate(new Vector2(speed * Time.deltaTime, 0));if (startPos.x - transform.position.x < -distance){transform.localScale = new Vector3(transform.localScale.x * (-1), transform.localScale.y, transform.localScale.z);direction = 0;}}if (GameManager.Instance.floor.transform.position.y > transform.position.y + 1)GameManager.Instance.AddInActiveObjectToPool(gameObject, ObjectType.Enemy);}private void OnTriggerEnter2D(Collider2D collision){if(collision.tag == "Player"){GameObject player = collision.gameObject;//速度为0player.GetComponent<Rigidbody2D>().velocity = Vector2.zero;//急速下降player.GetComponent<Rigidbody2D>().gravityScale = 3;//禁用colliderplayer.GetComponent<BoxCollider2D>().enabled = false;//endGameManager.Instance.EndGame();}//保证子弹是向上走的时候才销毁if(collision.tag == "Bullet" && collision.GetComponent<Rigidbody2D>().velocity.y >= 0){GameManager.Instance.AddInActiveObjectToPool(gameObject, ObjectType.Enemy);GameManager.Instance.AddInActiveObjectToPool(collision.gameObject, ObjectType.Bullet);GameManager.Instance.Score += 10;}}void Init(){sp = GetComponent<SpriteRenderer>();enmeyType = int.Parse(gameObject.name);sp.sprite = sprites[enmeyType];speed = Speed[enmeyType];startPos = transform.position;distance = Distance[enmeyType];}private void OnEnable(){Init();}}

Coin.cs金币

using System.Collections;using System.Collections.Generic;using UnityEngine;public class Coin : MonoBehaviour {private void OnTriggerEnter2D(Collider2D collision){if(collision.tag == "Player"){GameManager.Instance.AddInActiveObjectToPool(gameObject, ObjectType.Coin);GameManager.Instance.Coin++;//金币SoundManager.Instance.PlaySFX(1);}}private void Update(){if (GameManager.Instance.floor.transform.position.y > transform.position.y + 1)GameManager.Instance.AddInActiveObjectToPool(gameObject, ObjectType.Coin);}}

单例

using System.Collections;using System.Collections.Generic;using UnityEngine;/// <summary>/// 单例模板/// </summary>/// <typeparam name="T"></typeparam>public abstract class MonoSingleton<T> : MonoBehaviourwhere T : MonoBehaviour{static T m_instance;public static T Instance{get{return m_instance;}}protected virtual void Awake(){m_instance = this as T;}}

GameManager.cs

using System.Collections;using System.Collections.Generic;using UnityEngine;/// <summary>/// 游戏管理类/// </summary>public class GameManager : MonoSingleton<GameManager>{//tile池子public Queue<GameObject> tilePool = new Queue<GameObject>();public Queue<GameObject> coinPool = new Queue<GameObject>();public Queue<GameObject> bulletPool = new Queue<GameObject>();public Queue<GameObject> enemyPool = new Queue<GameObject>();public Queue<GameObject> itemPool = new Queue<GameObject>();//tile样本public GameObject tilePrefab;public GameObject coinPrefab;public GameObject bulletPrefab;public GameObject enemyPrefab;public GameObject itemPrefab;//游戏状态public GameState gamestate = GameState.PAUSED;//边界public GameObject floor;//数据设置public GameSetting Advance;//其他object的parentpublic Transform parent;//子弹生成位置public Transform bulletSpawnPos;//player玩家public GameObject player;//UI面板public UI_InGame UIInGame;int coin;int score;//对象池数量int initialSize = 40;//总权值float totalsum;//生成坐标Yfloat currentY = 2;//上一次时间float lastTime;public int Coin{get{return coin;}set{coin = value;//更新UIUIInGame.UpdateCoin(value);//print(value);}}public int Score{get{return score;}set{score = value;UIInGame.UpdateScore(value);}}private void Start(){//sum赋值GetAllWeight();//初始化对象池GenerateTilePool();GenerateBulletPool();GenerateCoinPool();GenerateEnemyPool();GenerateItemPool();//Debug.Log(itemPool.Count + " " + tilePool.Count + " " + coinPool.Count + " " + bulletPool.Count + " " + enemyPool.Count);//生成物体for (int i = 0; i < initialSize; i++){GenerateTile();GenerateItem();GenerateEnemy();GenerateCoin();}//换装SelectSkin();}/// <summary>/// 游戏开始调用/// </summary>public void PlayGame(){player.SetActive(true);gamestate = GameState.RUNNING;//读取皮肤}#region 初始化以及随机生成/// <summary>/// 生成tile池子/// </summary>void GenerateTilePool(){for (int i = 0; i < initialSize; i++){GameObject go = Instantiate(tilePrefab, transform);go.SetActive(false);go.name = i.ToString();tilePool.Enqueue(go);}}void GenerateItemPool(){for (int i = 0; i < initialSize; i++){GameObject go = Instantiate(itemPrefab, parent);go.SetActive(false);go.name = i.ToString();itemPool.Enqueue(go);}}void GenerateCoinPool(){for (int i = 0; i < initialSize; i++){GameObject go = Instantiate(coinPrefab, parent);go.SetActive(false);go.name = i.ToString();coinPool.Enqueue(go);}}void GenerateEnemyPool(){for (int i = 0; i < initialSize; i++){GameObject go = Instantiate(enemyPrefab, parent);go.SetActive(false);go.name = i.ToString();enemyPool.Enqueue(go);}}void GenerateBulletPool(){for (int i = 0; i < initialSize; i++){GameObject go = Instantiate(bulletPrefab, parent);go.SetActive(false);go.name = i.ToString();bulletPool.Enqueue(go);}}/// <summary>/// 随机砖块/// </summary>void GenerateTile(){GameObject go = GetInactiveObject(ObjectType.Tile);float rand = Random.Range(0, totalsum);int randNumber = SetTileByRandomNumber(rand);//NormalTile 0//BrokenTile 1//OneTimeOnly 2//SpringTile 3//MovingHorizontally 4//MovingVertically 5Vector2 pos = new Vector2(Random.Range(-4.5f, 4.5f), currentY);switch (randNumber){case 0:go.transform.position = pos;currentY += Random.Range(Advance.normalTile.minHeight, Advance.normalTile.maxHeight);go.name = "0";go.SetActive(true);break;case 1:go.transform.position = pos;currentY += Random.Range(Advance.brokenTile.minHeight, Advance.brokenTile.maxHeight);go.name = "1";go.SetActive(true);break;case 2:go.transform.position = pos;currentY += Random.Range(Advance.oneTimeOnly.minHeight, Advance.oneTimeOnly.maxHeight);go.name = "2";go.SetActive(true);break;case 3:go.transform.position = pos;currentY += Random.Range(Advance.springTile.minHeight, Advance.springTile.maxHeight);go.name = "3";go.SetActive(true);break;case 4:go.transform.position = pos;currentY += Random.Range(Advance.movingHorizontally.minHeight, Advance.movingHorizontally.maxHeight);go.name = "4";go.SetActive(true);break;case 5:go.transform.position = pos;currentY += Random.Range(Advance.movingVertically.minHeight, Advance.movingVertically.minHeight);go.name = "5";go.SetActive(true);break;default:break;}}//随机itemvoid GenerateItem(){float rand = Random.Range(0f, 1f);if (rand < Advance.itemProbability){GameObject randGo = null;while (true){randGo = transform.GetChild(Random.Range(0, initialSize)).gameObject;if (randGo.GetComponent<Tile>().tileType < 4 && randGo.transform.position.y > 5)break;}GameObject go = GetInactiveObject(ObjectType.Item);go.name = Random.Range(0, 2).ToString();go.SetActive(true);go.transform.position = randGo.transform.position + new Vector3(0, 0.5f, 0);}}/// <summary>/// 随机怪物/// </summary>void GenerateEnemy(){float rand = Random.Range(0f, 1f);if (rand < Advance.enemyProbability){Vector2 pos = new Vector2(Random.Range(-4.5f, 4.5f), currentY);GameObject go = GetInactiveObject(ObjectType.Enemy);go.name = Random.Range(0, 3).ToString();go.transform.position = pos;go.SetActive(true);}}/// <summary>/// 随机金币/// </summary>void GenerateCoin(){float rand = Random.Range(0f, 1f);if (rand < Advance.coinProbability){Vector2 pos = new Vector2(Random.Range(-4.5f, 4.5f), currentY);GameObject go = GetInactiveObject(ObjectType.Coin);go.name = "Coin";go.transform.position = pos;go.SetActive(true);}}#endregion/// <summary>/// 返回砖块类型/// </summary>/// <param name="number">权值</param>/// <returns></returns>int SetTileByRandomNumber(float number){if (number <= Advance.normalTile.weight)return 0;else if ((number <= Advance.normalTile.weight + Advance.brokenTile.weight))return 1;else if ((number <= Advance.normalTile.weight + Advance.brokenTile.weight + Advance.oneTimeOnly.weight))return 2;else if ((number <= Advance.normalTile.weight + Advance.brokenTile.weight + Advance.oneTimeOnly.weight + Advance.springTile.weight))return 3;else if ((number <= Advance.normalTile.weight + Advance.brokenTile.weight + Advance.oneTimeOnly.weight + Advance.springTile.weight + Advance.movingHorizontally.weight))return 4;else if ((number <= Advance.normalTile.weight + Advance.brokenTile.weight + Advance.oneTimeOnly.weight + Advance.springTile.weight + Advance.movingHorizontally.weight + Advance.movingVertically.weight))return 5;return -1;}/// <summary>/// 当一个tile销毁时 调用此方法/// </summary>void CreateTile(){if(gamestate != GameState.GAMEOVRE){GenerateTile();GenerateItem();GenerateEnemy();GenerateCoin();IncreaseDifficult(5);Score += 5;}}//难度曲线void IncreaseDifficult(float time){if(Time.time - lastTime > time){lastTime = Time.time;Advance.enemyProbability += 0.01f;Debug.Log("IncreaseDifficult");}}#region 对象池/// <summary>/// 从池子取物体/// </summary>/// <param name="type">类型</param>/// <returns></returns>public GameObject GetInactiveObject(ObjectType type){switch (type){case ObjectType.Tile:return tilePool.Dequeue();case ObjectType.Item:return itemPool.Dequeue();case ObjectType.Coin:return coinPool.Dequeue();case ObjectType.Enemy:return enemyPool.Dequeue();case ObjectType.Bullet:GameObject go = bulletPool.Dequeue();go.transform.position = bulletSpawnPos.position;go.SetActive(true);return go;default:return null;}}/// <summary>/// 回收物体/// </summary>/// <param name="go"></param>/// <param name="type"></param>public void AddInActiveObjectToPool(GameObject go, ObjectType type){go.SetActive(false);switch (type){case ObjectType.Tile:tilePool.Enqueue(go);CreateTile();break;case ObjectType.Item:itemPool.Enqueue(go);break;case ObjectType.Coin:coinPool.Enqueue(go);break;case ObjectType.Enemy:enemyPool.Enqueue(go);break;case ObjectType.Bullet:bulletPool.Enqueue(go);break;default:break;}}#endregion/// <summary>/// 获取权值所有/// </summary>void GetAllWeight(){float sum = 0;sum += Advance.normalTile.weight;sum += Advance.brokenTile.weight;sum += Advance.oneTimeOnly.weight;sum += Advance.springTile.weight;sum += Advance.movingVertically.weight;sum += Advance.movingHorizontally.weight;totalsum = sum;}/// <summary>/// 游戏结束/// </summary>public void EndGame(){if (gamestate != GameState.GAMEOVRE){gamestate = GameState.GAMEOVRE;//特效系列//1.相机抖动iTween.ShakePosition(Camera.main.gameObject, new Vector3(0.7f, 0.7f, 0), 0.5f);//2.晃一下UIInGame.ShowFlash();//save data UI if (PlayerPrefs.HasKey("BestScore")){//存储最大分if(score> PlayerPrefs.GetInt("BestScore")){PlayerPrefs.SetInt("BestScore", score);}}else{PlayerPrefs.SetInt("BestScore", score);}//存储金币PlayerPrefs.SetInt("Coin", coin + PlayerPrefs.GetInt("Coin", 100));//打开结束UIStartCoroutine(OpenGameOver());//播放结束musicMusicManager.Instance.isGameOver = true;}}/// <summary>/// 等待一秒再显示/// </summary>/// <returns></returns>IEnumerator OpenGameOver(){yield return new WaitForSeconds(0.7f);GUIManager.Instance.OpenPanel(3, true);}/// <summary>/// 换装/// </summary>public void SelectSkin(){player.GetComponent<SpriteRenderer>().sprite = SkinManager.Instance.Skins[ PlayerPrefs.GetInt("selectSkin", 0)].spriteCharacter;}}public enum ObjectType{Tile,Item,Coin,Enemy,Bullet}public enum GameState{PAUSED,RUNNING,GAMEOVRE}

GameSetting.cs

using System.Collections;using System.Collections.Generic;using UnityEngine;using System;/// <summary>/// 游戏设置/// </summary>[Serializable]public class GameSetting{[Serializable]public class NormalTile{//随机最小高度public float minHeight;//随机最大高度public float maxHeight;//生成权值public float weight;}[Serializable]public class BrokenTile{public float minHeight;public float maxHeight;public float weight;}[Serializable]public class OneTimeOnly{public float minHeight;public float maxHeight;public float weight;}[Serializable]public class SpringTile{public float minHeight;public float maxHeight;public float weight;}[Serializable]public class MovingHorizontally{public float minHeight;public float maxHeight;public float distance;public float weight;public float speed;}[Serializable]public class MovingVertically{public float minHeight;public float maxHeight;//移动距离public float distance;//速度public float weight;public float speed;}public NormalTile normalTile;public BrokenTile brokenTile;public OneTimeOnly oneTimeOnly;public SpringTile springTile;public MovingHorizontally movingHorizontally;public MovingVertically movingVertically;//生成item概率public float itemProbability;//生成coin概率public float coinProbability;//生成enemy概率public float enemyProbability;}

MusicManager.cs

using System.Collections;using System.Collections.Generic;using UnityEngine;/// <summary>/// 背景音乐/// </summary>public class MusicManager : MonoSingleton<MusicManager> {AudioSource ad;public AudioClip bg;public bool isGameOver = false;protected override void Awake(){base.Awake();ad = GetComponent<AudioSource>();PlayMusic();}public void PlayMusic(){ad.clip = bg;ad.Play();}private void Update(){//播放失败音效if (isGameOver){if (ad.pitch > 0.4f)//降低音调ad.pitch -= Time.deltaTime * 0.5f;elseisGameOver = false;}}}

SkinManager.cs

using System.Collections;using System.Collections.Generic;using UnityEngine;using System;public class SkinManager : MonoSingleton<SkinManager> {/// <summary>/// 皮肤数据/// </summary>[Serializable]public class Skin{public int price;//默认解锁?public bool isDefauleLock = false;public Sprite spriteCharacter;}public List<Skin> Skins = new List<Skin>();}

SoundManager.cs

using System.Collections;using System.Collections.Generic;using UnityEngine;public class SoundManager : MonoSingleton<SoundManager> {public AudioClip[] sfx;AudioSource ad;protected override void Awake(){base.Awake();ad = GetComponent<AudioSource>();}public void PlaySFX(int id){ad.PlayOneShot(sfx[id]);}//停止public void StopSFX(){ad.Stop();}}

UI

GUIManager.cs

using System.Collections;using System.Collections.Generic;using UnityEngine;/// <summary>/// UI框架/// </summary>public class GUIManager : MonoSingleton<GUIManager> {//面板资源public List<GameObject> panels;public Stack<GameObject> panelStack = new Stack<GameObject>();public int currentNumber;/// <summary>/// 当前面板/// </summary>public GameObject currentPanelObj{get{return panelStack.Peek();}}private void OnEnable(){OpenPanel(currentNumber);}/// <summary>/// 打开面板/// </summary>/// <param name="id">面板index</param>/// <param name="isHidePrevious">是否删除之前的面板</param>public void OpenPanel(int id, bool isHidePrevious = false){//A、B 毫无瓜葛if (isHidePrevious){if(panelStack.Peek() != null){currentPanelObj.SetActive(false);panelStack.Pop(); }panelStack.Push(panels[id]);currentPanelObj.SetActive(true);}else{panelStack.Push(panels[id]);currentPanelObj.SetActive(true);}}//返回前一页public void Back(){if (panelStack.Peek() != null){currentPanelObj.SetActive(false);panelStack.Pop();}currentPanelObj.SetActive(true);}}

UI_GameOver.cs

using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.SceneManagement;using UnityEngine.UI;public class UI_GameOver : MonoBehaviour {public Text txt_Best;public Text txt_Score;public void OnBtnReturn(){SceneManager.LoadScene(0);SoundManager.Instance.PlaySFX(0);}private void OnEnable(){txt_Best.text = PlayerPrefs.GetInt("BestScore", 0).ToString();txt_Score.text = GameManager.Instance.Score.ToString();}}

UI_InGame.cs

using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;public class UI_InGame : MonoBehaviour {public Text txt_Coin;public Text txt_Score;public GameObject white;//暂停游戏public void OnBtnPause(){GUIManager.Instance.OpenPanel(2);GameManager.Instance.gamestate = GameState.PAUSED;Time.timeScale = 0;SoundManager.Instance.PlaySFX(0);}private void OnEnable(){txt_Coin.text = "0";txt_Score.text = "0";}//更新金币public void UpdateCoin(int value){txt_Coin.text = value.ToString();}//更新分数public void UpdateScore(int value){txt_Score.text = value.ToString();}/// <summary>/// 显示白色背景/// </summary>public void ShowFlash(){StartCoroutine(ShowFlashing()); }IEnumerator ShowFlashing(){white.SetActive(true);yield return new WaitForSeconds(0.4f);white.SetActive(false);}}

UI_Main.cs

using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;public class UI_Main : MonoBehaviour {public Image player;public void OnBtnPlay(){GUIManager.Instance.OpenPanel(1, true);GameManager.Instance.PlayGame();SoundManager.Instance.PlaySFX(0);}public void OnBtnSkin(){GUIManager.Instance.OpenPanel(4);SoundManager.Instance.PlaySFX(0);}public void ChangeSkin(){player.GetComponent<Image>().sprite = SkinManager.Instance.Skins[ PlayerPrefs.GetInt("selectSkin", 0)].spriteCharacter;}private void Start(){ChangeSkin();}}

UI_Pause.cs

using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;public class UI_Pause : MonoBehaviour {public Text txt_Coin;public Text txt_Score;private void OnEnable(){txt_Coin.text = GameManager.Instance.Coin.ToString();txt_Score.text = GameManager.Instance.Score.ToString();}//返回游戏public void OnBtnReturn(){GameManager.Instance.gamestate = GameState.RUNNING;Time.timeScale = 1;GUIManager.Instance.Back();SoundManager.Instance.PlaySFX(0);}}

UI_Skin.cs

using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;public class UI_Skin : MonoBehaviour {public Text txt_Coin;public List<GameObject> skinItems = new List<GameObject>();public UI_Main UIMain;public void OnBtnReturn(){GUIManager.Instance.Back();SoundManager.Instance.PlaySFX(0);}private void OnEnable(){RefreshList();Init();}private void Update(){//if (Input.GetKeyDown(KeyCode.A))//{// PlayerPrefs.SetInt("Coin", 10000);//}}void Init(){txt_Coin.text = PlayerPrefs.GetInt("Coin",100).ToString();}/// <summary>/// 更新显示/// </summary>void RefreshList(){for (int i = 0; i < SkinManager.Instance.Skins.Count; i++){skinItems[i].transform.Find("Image_Character").GetComponent<Image>().sprite= SkinManager.Instance.Skins[i].spriteCharacter;//判断有没有解锁 0 lock 1 Unlockif (PlayerPrefs.GetInt("isSkin" + i + "UnLocked",0) == 0 && !SkinManager.Instance.Skins[i].isDefauleLock){//赋值 金币 图片//显示价格skinItems[i].transform.Find("Image_Coin").gameObject.SetActive(true);//更新价格skinItems[i].transform.Find("Image_Coin/Text_Coin").GetComponent<Text>().text = SkinManager.Instance.Skins[i].price.ToString();}else{skinItems[i].transform.Find("Image_Coin").gameObject.SetActive(false);}skinItems[i].name = i.ToString();}}/// <summary>/// 鼠标点击/// </summary>/// <param name="id">当前选择物体</param>public void OnBtnClick(GameObject id){foreach (var skins in skinItems){if (skins == id)skins.GetComponent<Move>().Resume();elseskins.GetComponent<Move>().Pause();}SkinManager.Skin skin = SkinManager.Instance.Skins[int.Parse(id.name)];if(skin.isDefauleLock || PlayerPrefs.GetInt("isSkin" + int.Parse(id.name) + "UnLocked", 0) == 1){//皮肤已经购买SelectSkin(int.Parse(id.name));SoundManager.Instance.PlaySFX(7);}else{//判断可不可以买if(skin.price <= PlayerPrefs.GetInt("Coin", 100)){//更新钱币数PlayerPrefs.SetInt("Coin", PlayerPrefs.GetInt("Coin", 100) - skin.price);//当前皮肤已经买了PlayerPrefs.SetInt("isSkin" + int.Parse(id.name) + "UnLocked", 1);SelectSkin(int.Parse(id.name));Init();Debug.Log("成功购买!" + id.name);SoundManager.Instance.PlaySFX(2);}else{Debug.Log("买不起");SoundManager.Instance.PlaySFX(4);}}}void SelectSkin(int id){PlayerPrefs.SetInt("selectSkin", id);RefreshList();UIMain.ChangeSkin();}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。