Unity愤怒的小鸟游戏教程(二)


本文提供全流程,中文翻译。

Chinar坚持将简单的生活方式,带给世人!

(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例)


AngryEva游戏效果:



教程一,请点击↓↓

Unity3D游戏-愤怒的小鸟游戏源码和教程(一)


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 —— 关卡页面脚本

用来控制每个关卡的解锁,和跳转到游戏场景

Chinar的GitHub工程案例

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游戏-愤怒的小鸟游戏源码和教程(二)的更多相关文章

  1. Unity3D游戏-愤怒的小鸟游戏源码和教程(一)

    Unity愤怒的小鸟游戏教程 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) AngryEva游戏效果: 1 ...

  2. Greenplum 源码安装教程 —— 以 CentOS 平台为例

    Greenplum 源码安装教程 作者:Arthur_Qin 禾众 Greenplum 主体以及orca ( 新一代优化器 ) 的代码以可以从 Github 上下载.如果不打算查看代码,想下载编译好的 ...

  3. C#+MVC+EF+LayUI框架的应用(附带源码和教程)

    内容: 1.该框架主要用到的技术有MVC,EF,Layer,以及Razor语法和数据库有关的操作. 2.框架二次开发(增加,删除,修改,建库,以及维护查询等) 3.框架公用库更新要求与规范 4.本框架 ...

  4. LLVM源码安装教程

    LLVM4.0源码安装教程 环境:ubuntu16.04 llvm-4.0 clang-4.0 步骤: 1.依赖库安装,注意llvm的编译对gcc版本和cmake版本有要求,请根据版本进行匹配 $ s ...

  5. 直播平台源码搭建教程:微信小程序中的直播如何去掉水印

    直播平台源码搭建教程:微信小程序中的直播如何去掉水印 本文与大家分享一下直播平台源码搭建教程,如何去掉直播视频的水印 var services = require('../../lib/service ...

  6. Unity时钟定时器插件——Vision Timer源码分析之二

      Unity时钟定时器插件——Vision Timer源码分析之二 By D.S.Qiu 尊重他人的劳动,支持原创,转载请注明出处:http.dsqiu.iteye.com 前面的已经介绍了vp_T ...

  7. Redis源码漂流记(二)-搭建Redis调试环境

    Redis源码漂流记(二)-搭建Redis调试环境 一.目标 搭建Redis调试环境 简要理解Redis命令运转流程 二.前提 1.有一些c知识简单基础(变量命名.常用数据类型.指针等) 可以参考这篇 ...

  8. 【原】FMDB源码阅读(二)

    [原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...

  9. 【原】AFNetworking源码阅读(二)

    [原]AFNetworking源码阅读(二) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇中我们在iOS Example代码中提到了AFHTTPSessionMa ...

随机推荐

  1. 什么是分布式锁?Redis实现分布式锁详解

    在很多场景中,我们为了保证数据的最终一致性,需要很多的技术方案来支持,比如分布式事务.分布式锁等.那具体什么是分布式锁,分布式锁应用在哪些业务场景.如何来实现分布式锁呢?今天继续由陈睿|mikeche ...

  2. Mask R-CNN论文理解

    摘要: Mask RCNN可以看做是一个通用实例分割架构. Mask RCNN以Faster RCNN原型,增加了一个分支用于分割任务. Mask RCNN比Faster RCNN速度慢一些,达到了5 ...

  3. c++ primer plus 第三章 课后题答案

    #include<iostream> using namespace std; int main() { ; int shen_gao; cout <<"Please ...

  4. Qt与FFmpeg联合开发指南(四)——编码(2):完善功能和基础封装

    上一章我用一个demo函数演示了基于Qt的音视频采集到编码的完整流程,最后经过测试我们也发现了代码中存在的问题.本章我们就先处理几个遗留问题,再对代码进行完善,最后把编码功能做基础封装. 一.遗留问题 ...

  5. 新的请求方式 fetch和axios

    参考链接:https://www.javascriptcn.com/read-5840.html axios使用文档: https://www.kancloud.cn/yunye/axios/2348 ...

  6. ContentPresenter

    这是2年前写了一篇文章 http://www.cnblogs.com/Clingingboy/archive/2008/07/03/wpfcustomcontrolpart-1.html 我们先来看M ...

  7. (转)代号为Purley的新一代服务器平台

    英特尔(Intel)正式发布了代号为Purley的新一代服务器平台,包括代号为Skylake的新一代至强(Xeon)CPU,命名为英特尔至强可扩展处理器(Intel Xeon Scalable Pro ...

  8. HDOJ1000

    #include<iostream> using namespace std; int main() { int a,b; while(cin >> a >> b) ...

  9. JAVA计算文件的crc32校验码

    import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java ...

  10. 共享内存创建shmget控制操作shmat,shmctl

    1.共享内存的数据结构 共享内存就是分配一块能被其他进程访问的内存.每个共享内存段在内核中维护着一个内部结构: struct shmid_ds { struct ipc_perm shm_perm; ...