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);
}
}
运行程序,结果如下: