Unity愤怒的小鸟游戏教程(二)
Chinar
Chinar
END
本文提供全流程,中文翻译。 Chinar坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) |
AngryEva游戏效果:
教程一,请点击↓↓
1
LevelFrameSelect —— 关卡框选择
用来控制关卡框的解锁,页面跳转
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
/// <summary>
/// 关卡框架选择 —— 用来控制关卡的解锁与否
/// </summary>
public class FrameSelect : MonoBehaviour
{
public int StarNum; //行星数量
public bool isSelect; //是否可选
public GameObject LocksGameObject; //枷锁
public GameObject StarsGameObject; //星星
public GameObject AllFramePanel; //所有选关界面
public GameObject MapLevelPanel; //关卡界面
private Button SelectButton; //按钮组件
public Text LevelStarsText; //关卡星星数量
public int LevelStarNum = 0; //关卡开始数量
public int LevelEndCount = 2; //关卡结束数量
void Start()
{
//PlayerPrefs.DeleteAll();
SelectButton = GetComponent<Button>();
SelectButton.onClick.AddListener(ToMapLevel); //绑定选关按钮事件
SelectButton = GameObject.Find("ExitGameButton").GetComponent<Button>();
SelectButton.onClick.AddListener(ExitGame); //绑定退出游戏按钮事件
SelectButton = GameObject.Find("BackStartPanelButton").GetComponent<Button>();
SelectButton.onClick.AddListener(BackStarPanel); //绑定按钮事件
if (PlayerPrefs.GetInt("AllStarNum", 0) >= StarNum) //声明一个所有星星数量>0
{
isSelect = true; //可以选择
}
if (isSelect)
{
LocksGameObject.SetActive(false); //关闭枷锁
StarsGameObject.SetActive(true); //开启星星计数
//显示星星
int counts = 0; //用来计数关卡的总星星个数
for (int i = LevelStarNum; i <= LevelEndCount; i++)
{
counts += PlayerPrefs.GetInt("Level (" + i + ")", 0);
}
LevelStarsText.text = counts + "/9";
}
}
/// <summary>
/// 跳转到关卡界面
/// </summary>
public void ToMapLevel()
{
if (isSelect)
{
AllFramePanel.SetActive(false); //关闭选关界面
MapLevelPanel.SetActive(true); //开启关卡界面
}
}
/// <summary>
/// 退出游戏
/// </summary>
public void ExitGame()
{
Application.Quit();
}
/// <summary>
/// 返回开始界面
/// </summary>
public void BackStarPanel()
{
SceneManager.LoadScene(0);
}
}
2
MapLevel —— 关卡页面脚本
用来控制每个关卡的解锁,和跳转到游戏场景
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
/// <summary>
/// 关卡选择脚本
/// </summary>
public class MapLevel : MonoBehaviour
{
public bool isSelect; //可选状态
public Sprite LevelSprite; //替换关卡图
private Image LeveLImage; //UI关卡图组件
public GameObject AllFramePanel; //选关场景界面
private Button BackButton; //返回按钮
public GameObject[] Stars; //星星数组
public string BiaoShiString; //标示
public bool isDevelop; //是否开发
private void Awake()
{
LeveLImage = GetComponent<Image>();
}
void Start()
{
BackButton = transform.parent.parent.transform.Find("Map1_BackButton").GetComponent<Button>();
BackButton.onClick.AddListener(ToFrame); //绑定按钮事件
BackButton = GetComponent<Button>();
BackButton.onClick.AddListener(Selected); //绑定按钮事件
if (transform.parent.GetChild(0).name == gameObject.name) //判断是否是第一关
{
isSelect = true;
}
else //判断前一关的分数
{
if (BiaoShiString == "0")
{
int beforeNum = transform.GetSiblingIndex() - 1;
if (PlayerPrefs.GetInt("Level (" + beforeNum + ")") > 0)
{
isSelect = true;
}
}
else if (BiaoShiString != null && isDevelop)
{
int beforeNum = transform.GetSiblingIndex() - 1;
if (beforeNum < 2) //限定前三个
{
if (PlayerPrefs.GetInt("Level (" + BiaoShiString + beforeNum + ")") > 0) //判断并解开后一关关卡
{
isSelect = true;
}
}
}
}
if (isSelect) //处理关卡显示效果
{
LeveLImage.overrideSprite = LevelSprite; //替换图片
transform.Find("LevelNum").gameObject.SetActive(true); //开启关卡名
int num = PlayerPrefs.GetInt(gameObject.name); //关卡名:对应行星数量
if (num > 0) //显示几颗星
{
for (int i = 0; i < num; i++)
{
Stars[i].SetActive(true);
}
}
}
}
/// <summary>
/// 跳转到选关场景界面
/// </summary>
public void ToFrame()
{
AllFramePanel.SetActive(true); //关闭选关界面
transform.parent.parent.gameObject.SetActive(false); //开启关卡界面
}
/// <summary>
/// 进入关卡
/// </summary>
public void Selected()
{
if (isSelect)
{
PlayerPrefs.SetString("NowLevel", gameObject.name);
SceneManager.LoadScene(2);
}
else
{
if (isDevelop == false) //未曾开发
{
GameObject obj = Instantiate(Resources.Load<GameObject>("Prefabs/HintPanel")); //提示页面
obj.transform.SetParent(GameObject.Find("Canvas").transform);
obj.transform.localPosition = Vector3.zero;
Destroy(obj, 2);
}
}
}
}
Chinar
支持
May Be —— 搞开发,总有一天要做的事!
拥有自己的服务器,无需再找攻略! Chinar 提供一站式教程,闭眼式创建! 为新手节省宝贵时间,避免采坑! |
先点击领取 —— 阿里全产品优惠卷 (享受最低优惠)
1 —— 云服务器超全购买流程 (新手必备!)
2 —— 阿里ECS云服务器自定义配置 - 购买教程(新手必备!)
3—— Windows 服务器配置、运行、建站一条龙 !
4 —— Linux 服务器配置、运行、建站一条龙 !
Chinar
END
本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究
对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: ichinar@icloud.com
对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址