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. 《剑指offer》第四题(二维数组中的查找)

    // 二维数组中的查找 // 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按 // 照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个 // 整数,判断数组 ...

  2. js 文件上传

    <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&quo ...

  3. LeetCode--100--相同的树

    问题描述: 给定两个二叉树,编写一个函数来检验它们是否相同. 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的. 示例 1: 输入: 1 1 / \ / \ 2 3 2 3 [1,2, ...

  4. GetImageURL

    Sub GetImageUrl(ByVal URL As String) Dim strText As String Dim i As Long Dim OneImg With CreateObjec ...

  5. django的url的name参数的意义

    Templates的链接地址都是根据urlpatterns定义的地址,拼凑成地址字符串,很难看,而且Templates里拼凑成的地址,随着页面的增加而不断增加,一旦在urlpatterns里的某个地址 ...

  6. python-day9-数据类型总结

    数据类型总结: 常用:  数字 字符串 列表 元组 字典 不常用:集合 1.按照存值个数: 1个:数字,字符串 多个:列表,元组,字典,(集合) 2.按照可变不可变: 可变:列表,字典,(集合) 不可 ...

  7. Py打包exe报错

      Py打包exe报错       下载地址 https://github.com/pyinstaller/pyinstaller       用管理员执行   pip install https:/ ...

  8. js数组去重的几种方法

    1.遍历数组法 最简单的去重方法, 实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中:注意点:判断值是否在数组的方法“indexOf”是ECMAScript5 方法,IE8以下不支持 ...

  9. Openwrt Export Gpio Configure (7)

    1      Scope of Document This document describes how to export gpio interface under gpio-export driv ...

  10. Java——使用File类递归遍历指定路劲下的所有文件

    body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...