前言
自己做一下小时候玩的风靡一时的愤怒的小鸟这个游戏,相信有很多人都在某一段时间沉迷过这个游戏吧~~
五、游戏逻辑判定
游戏胜利的判定,多只小鸟轮番成为游戏主角,毕竟我们玩的愤怒的小鸟是有多个小鸟的
1. 增加小猪和小鸟的数量
现在我们的场景中只有一个小鸟和一个猪,所以我们先使用copy的方式来增加小鸟和猪的数量,毕竟小鸟和小猪的脚本配置已经差不多了。
直接选中小鸟和猪,使用快捷键Ctrl + D
进行复制个数看你自己
2. 创建管理类
- 添加一个空物体,并且为空物体添加一个脚本,一般都命名为:
GameManager
。 - 创建空物体直接在
Hierarchy
中右键创建Create Empty
即可,同样的,我们命名为GameManager
。 - 然后点开
GameManager
的Inspector
面板,创建GameManager
脚本。 - 编写
GameManager
类的代码
/**
* ==========================================
* FileName:#GameManager#
* Author:#Smly#
* CreatTime:#2022/10/7#
* NowPath:#path#
* ==========================================
*/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameManager : MonoBehaviour
{
public List<ColliderBird> birds;
public List<Pig> pigs;
//设置单例模式,小鸟死亡后将小鸟从列表中删除,然后再次调用BirdSet函数,将删除后的列表中的第一个小鸟设置启用
public static GameManager _instance;
/// <summary>
/// 遍历小鸟列表,把除了第一个的小鸟的弹簧和脚本组件禁用
/// </summary>
public void BirdSet()
{
for (int i = 0; i < birds.Count; i++)
{
if (i==0)
{
// 第一个小鸟,弹簧和脚本组件启用
birds[i].enabled = true;
birds[i].sp2.enabled = true;//这里需要将我们之前设置的弹簧组件设置成public,否则无法访问
}
else
{
//后面的小鸟禁用
birds[i].enabled = false;
birds[i].sp2.enabled = false;
}
}
}
}
- 将游戏物体添加到我们创建的列表里,直接拖拽即可,小鸟注意顺序,小猪不需要
3. 设置小鸟和小猪死亡
修改部分如下:
小鸟脚本部分
public class ColliderBird : MonoBehaviour
{
//修改部分
[HideInInspector]
public SpringJoint2D sp2;//弹簧组件
void Power()
{
sp2.enabled = false;//将束缚小鸟的弹簧禁用掉
Invoke("NextBird", 5);//五秒后销毁小鸟
}
//新增部分
void NextBird()
{
GameManager._instance.birds.Remove(this);//将小鸟从列表中移除
Destroy(gameObject);//销毁小鸟
}
}
小猪脚本部分:
public class Pig : MonoBehaviour
{
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.relativeVelocity.magnitude > maxSpeed)
{
//销毁小猪
GameManager._instance.pigs.Remove(this);//将死亡的小猪从列表中移除
Destroy(gameObject);
}
else if (collision.relativeVelocity.magnitude > minSpeed && collision.relativeVelocity.magnitude < maxSpeed)
{
//小猪受伤,图片更换
render.sprite = hurtPig;
}
}
}
4. 输赢的判断
根据场景中小鸟和猪的数量进行判定
小猪数量>小鸟数量——>输了
小鸟数量>0且小猪数量=0——>赢了
小鸟数量和小猪数量都>0——>下一个小鸟登场
public class GameManager : MonoBehaviour
{
public void NextBird()
{
if (pigs.Count > 0)
{
if (birds.Count < 0)
{
//输了
//游戏结束
}
else
{
BirdSet();
}
}
else
{
//赢了
}
}
}
同时我们需要对GameManager
类进行初始化,所以在小鸟类中
public class ColliderBird : MonoBehaviour
{
private void Start()
{
right = GameObject.Find("Rifht_dangong").GetComponent<Transform>();
rb2 = GetComponent<Rigidbody2D>();
sp2 = GetComponent<SpringJoint2D>();
GameManager._instance.BirdSet();
}
}
5. 运行代码查看效果