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

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

相关文章
|
4月前
|
图形学
【Unity 3D】3D游戏跑酷小子实战教学(附源码和步骤 超详细)
【Unity 3D】3D游戏跑酷小子实战教学(附源码和步骤 超详细)
100 0
|
4月前
|
C# 图形学
【Unity】2D游戏-愤怒的小鸟教学实战(附源码和实现步骤 超详细)
【Unity】2D游戏-愤怒的小鸟教学实战(附源码和实现步骤 超详细)
134 1
|
4月前
|
缓存 API 图形学
【Unity 3D】AssetBundle打包、上传、加载、卸载详解及演示(附源码)
【Unity 3D】AssetBundle打包、上传、加载、卸载详解及演示(附源码)
77 0
|
4月前
|
编解码 前端开发 人机交互
【Unity 3D】UI系统中UGUI各个组件的详细讲解(附源码 超详细)
【Unity 3D】UI系统中UGUI各个组件的详细讲解(附源码 超详细)
77 0
|
8月前
|
持续交付 图形学 开发者
【Unity实战系列】Unity的下载安装以及汉化教程
【Unity实战系列】Unity的下载安装以及汉化教程
212 0
|
8月前
|
数据可视化 C# 图形学
【unity造轮子】Unity ShaderGraph使用教程与各种特效案例
点关注不迷路,持续输出干货文章。 嗨,大家好,我是向宇。最近在玩ShaderGraph,决定把我自己实验的所有效果记录到这篇博客中,附带完整高清的连线动态图,希望对想要学习ShaderGraph的同学有所启发。后续有发现一些新的ShaderGraph我还会继续进行更新。
|
存储 负载均衡 安全
【Unity干货教程】如何实现Unity和Android原生互相调用?
Unity是一个跨平台开发工具,发布到移动平台也是大部分Unity开发者的必备技能。而由于Unity跨平台的特性,总会遇到在移动平台的技术细节支持不够,或者需要在调用其他原生插件的情况。这里我们说一下如何在Android Studio中创建一个可供Unity调用的aar插件,以实现Unity和Android原生互相调用的目的。
|
4月前
|
C# 图形学
【Unity 3D】元宇宙案例之虚拟地球信息射线实战(附源码、演示视频和步骤 超详细)
【Unity 3D】元宇宙案例之虚拟地球信息射线实战(附源码、演示视频和步骤 超详细)
48 0
|
4月前
|
人工智能 自然语言处理 区块链
【Unity 3D】元宇宙概念、应用前景、价值链等概述
【Unity 3D】元宇宙概念、应用前景、价值链等概述
51 0
|
4月前
|
vr&ar C# 图形学
【Unity 3D】VR飞机拆装后零件说明功能案例实战(附源码和演示视频 超详细)
【Unity 3D】VR飞机拆装后零件说明功能案例实战(附源码和演示视频 超详细)
37 0