【U3D小游戏】愤怒的小鸟(四)部分游戏逻辑
【摘要】 自己做一下小时候玩的风靡一时的愤怒的小鸟这个游戏,相信有很多人都在某一段时间沉迷过这个游戏吧~~
前言
自己做一下小时候玩的风靡一时的愤怒的小鸟这个游戏,相信有很多人都在某一段时间沉迷过这个游戏吧~~
五、游戏逻辑判定
游戏胜利的判定,多只小鸟轮番成为游戏主角,毕竟我们玩的愤怒的小鸟是有多个小鸟的
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. 运行代码查看效果
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)