愤怒的小鸟 Day 2

1.游戏逻辑的判定,实现多只小鸟的飞出

生成GameManager脚本,添加小鸟和猪的列表,让多只小鸟飞出

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameManager : MonoBehaviour {

    public static GameManager _instance;

    public List<Bird> birds;
    public List<Pig> pig;

    private void Awake()
    {
        _instance = this;
    }

    private void Start()
    {
        Initialized();
    }

    public void Initialized()
    {
        for(int i = 0; i < birds.Count; i++)
        {
            if(i == 0) //第一只小鸟
            {
                birds[i].enabled = true;
                birds[i].sp.enabled = true;
            }
            else
            {
                birds[i].enabled = false;
                birds[i].sp.enabled = false;
            }
        }
    }

    /// <summary>
    /// 判定游戏逻辑
    /// </summary>
    public void NextBird()
    {
        if (pig.Count > 0)
        {
            if(birds.Count > 0)
            {
                //下一只飞吧
                Initialized();
            }
            else
            {
                //输了
            }
        }
        else
        {
            //赢了
        }
    }
}

在Bird脚本中添加消失加载下一只的操作

    /// <summary>
    /// 下一只小鸟的飞出
    /// </summary>
    void Next() 
    {
        GameManager._instance.birds.Remove(this);
        Destroy(gameObject);
        Instantiate(boom, transform.position, Quaternion.identity);
        GameManager._instance.NextBird();
    }
}

    void Fly()
    {
        sp.enabled = false;
        Invoke("Next", 5);
    }

在Pig脚本中添加删除Pig列表中的操作

        if (isPig)
        {
            GameManager._instance.pig.Remove(this);
        }

2.解决重复划线,小鸟轮换速度突然变大的问题

记录第一只小鸟的初始位置,当后面更新小鸟时,将初始的位置赋给它

    private Vector3 originPos; //初始化的位置
        private void Awake()
    {
        _instance = this;
        if (birds.Count > 0)
        {
            originPos = birds[0].transform.position;
        }   
    }
        public void Initialized()
    {
        for(int i = 0; i < birds.Count; i++)
        {
            if(i == 0) //第一只小鸟
            {
                birds[0].transform.position = originPos;
                birds[i].enabled = true;
                birds[i].sp.enabled = true;
            }
            else
            {
                birds[i].enabled = false;
                birds[i].sp.enabled = false;
            }
        }
    }

小鸟发射时禁用划线,当需要划线时再启用

    private void OnMouseUp()//鼠标抬起
    {
        isClick = false;
        rg.isKinematic = false;
        Invoke("Fly", 0.1f);
        //禁用划线组件
        right.enabled = false;
        left.enabled = false;
    }
    /// <summary>
    /// 划线
    /// </summary>
    void Line()
    {
        right.enabled = true;
        left.enabled = true;

        right.SetPosition(0, rightPos.position);
        right.SetPosition(1, transform.position);

        left.SetPosition(0, leftPos.position);
        left.SetPosition(1, transform.position);
    }

3.添加小鸟飞出的拖尾效果

详细查看https://blog.csdn.net/akof1314/article/details/37603559

4.整合场景,解决无法显示划线弹弓的问题

给场景添加物体

5.添加失败,胜利的游戏UI界面

制作胜利失败的UI,在GameManager里合适的位置添加代码

    public GameObject win;
    public GameObject lose;

    /// <summary>
    /// 判定游戏逻辑
    /// </summary>
    public void NextBird()
    {
        if (pig.Count > 0)
        {
            if(birds.Count > 0)
            {
                //下一只飞吧
                Initialized();
            }
            else
            {
                //输了
                lose.SetActive(true);
            }
        }
        else
        {
            //赢了
            win.SetActive(true);
        }
    }

运行程序结果如下:

6.修改火花粒子系统

7. 让星星一颗一颗的显示

在GameManager中添加入下代码

 public void ShowStars()
    {
        StartCoroutine("Show");
    }

    IEnumerator Show()
    {
        for (int i = 0; i < birds.Count + 1; i++)
        {
            yield return new WaitForSeconds(0.2f);
            stars[i].SetActive(true);
        }
    }

运行程序,结果如下

8.添加暂停动画

9.添加鼠标注册事件

新建PausePanel,在里边添加方法

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PausePanel : MonoBehaviour {

    private Animator anim;
    public GameObject button;

    private void Awake()
    {
        anim = GetComponent<Animator>();
    }

    public void Retry()
    {

    }

    /// <summary>
    /// 点击了pause按钮
    /// </summary>
    public void Pause()
    {
        //1.播放动画
        //2.暂停
        anim.SetBool("isPause", true);
        button.SetActive(false);
    }

    public void Home()
    {

    }

    /// <summary>
    /// 点击了继续按钮
    /// </summary>
    public void Resume()
    {
        Time.timeScale = 1;
        anim.SetBool("isPause", false);
        
    }

    /// <summary>
    /// pause动画播放完调用
    /// </summary>
    public void PauseAnimEnd()
    {
        Time.timeScale = 0;
    }

    /// <summary>
    /// resume动画播放完调用
    /// </summary>
    public void ResumeAnimEnd()
    {
        button.SetActive(true);
    }
}

运行程序,结果如下:

猜你喜欢

转载自blog.csdn.net/kouzhuanjing1849/article/details/84328617