开发者社区> chinar-yunxi> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

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

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


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

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

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



AngryEva游戏效果:

这里写图片描述



教程一,请点击↓↓

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


1

LevelFrameSelect —— 关卡框选择



用来控制关卡框的解锁,页面跳转

举个栗子黑白88

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



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

举个栗子黑白88Chinar的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);
            }
        }
    }
}

这里写图片描述

这里写图片描述



70

Chinar


支持

May Be —— 搞开发,总有一天要做的事!


拥有自己的服务器,无需再找攻略!

Chinar 提供一站式教程,闭眼式创建!

为新手节省宝贵时间,避免采坑!


先点击领取 —— 阿里全产品优惠卷 (享受最低优惠)


1 —— 云服务器超全购买流程 (新手必备!)

2 —— 阿里ECS云服务器自定义配置 - 购买教程(新手必备!)

3—— Windows 服务器配置、运行、建站一条龙 !

4 —— Linux 服务器配置、运行、建站一条龙 !



70

Chinar


END

本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究

对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: ichinar@icloud.com

对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
一种兼容、更小、易用的WEB字体API
如何使用 Google Fonts CSS API 有效地使用WEB字体?
32 0
人人都能做游戏系列教程1(视频+图文版)
决定将“人人都能做游戏”系列教程做成视频教程,帮助更多的想要做游戏的人做出自己的小游戏。
90 0
Epic 官方视频教程《 Battery Collector》源码+超详细注释【C++】【UE4】
Epic 官方视频教程《 Battery Collector》源码+超详细注释【C++】【UE4】
32 0
AI五天训练营教程 Day 2
这个人工智能已经普及的时代,各行各业都充斥着AI的身影。
651 0
视觉AI五天训练营教程 Day 1
在这个人工智能已经普及的时代,各行各业都充斥着AI的身影。大部分人认为人工智能起点高,入门难,想要使用AI服务又无法独立完成编写,阿里云视觉平台是基于阿里巴巴视觉智能技术实践经验,面向视觉智能技术企业和开发商(含开发者),为其提供高易用、普惠的视觉API服务,帮助企业快速建立视觉智能技术的应用能力的综合性视觉AI能力平台。开发者可以通过阿里云视觉平台提供的通用且标准化的接入方式,快速接入及使用阿里云视觉平台提供的包括人脸人体、文字识别、商品理解、内容安全、图像识别、图像生产、分割抠图、视觉搜索、目标检测、图像分析处理、视频理解、视频生产、视频分割13个类目多个API能力。
660 0
视觉AI五天训练营教程 Day 1
本文章为本人观看,加上百度。
102 0
Unity3d游戏开发之-单例设计模式-多线程一
单例模式3: 多线程一 using System; using System.Collections.Generic; using System.Linq; using System.
588 0
[Unity3d]unity从入门到精通官方教程
 《Unity 4.x 入门到精通》完整pdf 一百多M:http://download.csdn.net/detail/s10141303/6912127 如果不能正常下载   也可以加群下载:375151422!
584 0
+关注
chinar-yunxi
有人天生为王、有人败者为寇 脚下的路如果不是自己的选择,那么旅途的终点在哪?也就没人知道....
157
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载