U3D小游戏愤怒的小鸟部分游戏逻辑

Posted 布小禅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了U3D小游戏愤怒的小鸟部分游戏逻辑相关的知识,希望对你有一定的参考价值。

前言

自己做一下小时候玩的风靡一时的愤怒的小鸟这个游戏,相信有很多人都在某一段时间沉迷过这个游戏吧~~

五、游戏逻辑判定

游戏胜利的判定,多只小鸟轮番成为游戏主角,毕竟我们玩的愤怒的小鸟是有多个小鸟的

1. 增加小猪和小鸟的数量

现在我们的场景中只有一个小鸟和一个猪,所以我们先使用copy的方式来增加小鸟和猪的数量,毕竟小鸟和小猪的脚本配置已经差不多了。

直接选中小鸟和猪,使用快捷键Ctrl + D进行复制个数看你自己

2. 创建管理类

  1. 添加一个空物体,并且为空物体添加一个脚本,一般都命名为:GameManager

  2. 创建空物体直接在Hierarchy中右键创建Create Empty即可,同样的,我们命名为GameManager

  3. 然后点开GameManagerInspector面板,创建GameManager脚本。

  4. 编写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;
                
            
        
    
    
  5. 将游戏物体添加到我们创建的列表里,直接拖拽即可,小鸟注意顺序,小猪不需要

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. 运行代码查看效果

以上是关于U3D小游戏愤怒的小鸟部分游戏逻辑的主要内容,如果未能解决你的问题,请参考以下文章

U3D小游戏愤怒的小鸟部分游戏逻辑

U3D小游戏愤怒的小鸟地图选则界面和部分逻辑

U3D小游戏愤怒的小鸟地图选则界面和部分逻辑

U3D小游戏愤怒的小鸟地图选则界面和部分逻辑

U3D小游戏愤怒的小鸟小特效

U3D小游戏愤怒的小鸟小特效