Unity3D游戏-愤怒的小鸟游戏源码和教程(二)
Unity愤怒的小鸟游戏教程(二)
|
本文提供全流程,中文翻译。 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);
}
}
}
}
" role="presentation">
Chinar
支持
May Be —— 搞开发,总有一天要做的事!
|
拥有自己的服务器,无需再找攻略! Chinar 提供一站式教程,闭眼式创建! 为新手节省宝贵时间,避免采坑! |
先点击领取 —— 阿里全产品优惠卷 (享受最低优惠)
1 —— 云服务器超全购买流程 (新手必备!)
2 —— 阿里ECS云服务器自定义配置 - 购买教程(新手必备!)
3—— Windows 服务器配置、运行、建站一条龙 !
4 —— Linux 服务器配置、运行、建站一条龙 !
" role="presentation">
技术交流群:806091680 ! Chinar 欢迎你的加入
END
本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究
对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: ichinar@icloud.com
对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址
Unity3D游戏-愤怒的小鸟游戏源码和教程(二)的更多相关文章
- Unity3D游戏-愤怒的小鸟游戏源码和教程(一)
Unity愤怒的小鸟游戏教程 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) AngryEva游戏效果: 1 ...
- Greenplum 源码安装教程 —— 以 CentOS 平台为例
Greenplum 源码安装教程 作者:Arthur_Qin 禾众 Greenplum 主体以及orca ( 新一代优化器 ) 的代码以可以从 Github 上下载.如果不打算查看代码,想下载编译好的 ...
- C#+MVC+EF+LayUI框架的应用(附带源码和教程)
内容: 1.该框架主要用到的技术有MVC,EF,Layer,以及Razor语法和数据库有关的操作. 2.框架二次开发(增加,删除,修改,建库,以及维护查询等) 3.框架公用库更新要求与规范 4.本框架 ...
- LLVM源码安装教程
LLVM4.0源码安装教程 环境:ubuntu16.04 llvm-4.0 clang-4.0 步骤: 1.依赖库安装,注意llvm的编译对gcc版本和cmake版本有要求,请根据版本进行匹配 $ s ...
- 直播平台源码搭建教程:微信小程序中的直播如何去掉水印
直播平台源码搭建教程:微信小程序中的直播如何去掉水印 本文与大家分享一下直播平台源码搭建教程,如何去掉直播视频的水印 var services = require('../../lib/service ...
- Unity时钟定时器插件——Vision Timer源码分析之二
Unity时钟定时器插件——Vision Timer源码分析之二 By D.S.Qiu 尊重他人的劳动,支持原创,转载请注明出处:http.dsqiu.iteye.com 前面的已经介绍了vp_T ...
- Redis源码漂流记(二)-搭建Redis调试环境
Redis源码漂流记(二)-搭建Redis调试环境 一.目标 搭建Redis调试环境 简要理解Redis命令运转流程 二.前提 1.有一些c知识简单基础(变量命名.常用数据类型.指针等) 可以参考这篇 ...
- 【原】FMDB源码阅读(二)
[原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...
- 【原】AFNetworking源码阅读(二)
[原]AFNetworking源码阅读(二) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中我们在iOS Example代码中提到了AFHTTPSessionMa ...
随机推荐
- Spring Boot入门——文件上传与下载
1.在pom.xml文件中添加依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht ...
- The Front-End Checklist
做个记录,摘自Front-End Performance Checklist HTML Minified HTML: The HTML code is minified, comments, whit ...
- C#一套简单的单例系统
单例基类 public class CSingletonBase<TYPE> { public static TYPE Singleton { get { return m_singlet ...
- [转]mysql日常工作手记
1. 给navy加show权限: 1 2 update mysql.user set Show_db_priv='Y' where user='navy'; flush privileges; 2. ...
- 构建NCBI本地BLAST数据库 (NR NT等) | blastx/diamond使用方法 | blast构建索引 | makeblastdb
参考链接: FTP README 如何下载 NCBI NR NT数据库? 下载blast:ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+ 先了解 ...
- English trip V1 - 5.That's Amazing! 棒极了! Teacher:Patrick Key: can or can't
In this lesson you will learn to describe what people can do. 在本课中,您将学习如何描述人们可以做什么. STARTE drive a c ...
- Change-free CodeForces - 767E (贪心)
题目链接 大意:Arseny有m个1元硬币, 无限多100元钞票, 他要按顺序买n个东西, 第i天如果找零x个硬币, 他的不满值会加 w[i]*x, 求最少不满值. 若找零, 则硬币增加 100-ci ...
- hdu1584
蜘蛛牌 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- Socket编程基础篇
Socket又称"套接字",应用程序通常通过“套接字”向网络发生请求或者应答网络请求. Socket和ServerSocket类库位于java.net包中,ServerSocket ...
- golang channel本质——共享内存
channel是golang中很重要的概念,配合goroutine是golang能够方便实现并发编程的关键.channel其实就是传统语言的阻塞消息队列,可以用来做不同goroutine之间的消息传递 ...