unity小功能实现(达成条件后消除障碍物)


前言

因为做的小demo是以经典2D教程Ruby为原型的,射击打怪类的游戏,所以设计关卡的时候想到了一个,在一个场景中,击杀掉全部的怪物,就可以打开去下一个场景的门,或者说有个障碍物挡在必经之路上,你需要集齐几个碎片,障碍物就会自动消失。


我的这个demo需要的是,在一个场景中,消灭所有怪,障碍物就自动销毁,所以我的思路最开始是:
1.障碍物绑上代码,public出那几个怪,然后放进去,update里面反复判断这些怪是否被消灭(也就是==null)
2.如果全部被消灭,就destroy掉这个障碍物
我觉得思路没问题,但是不具有普遍性,下一关如果也要消灭完怪物再消除障碍物,消灭的怪物种类数量不一样,那又得重新定代码。
所以我又想了一下,既然是把怪物都消灭,就消除障碍物,那就把所有怪物都统一放在一个数据结构中,当这个数据结构空了,也就是怪物全消灭了,那就销毁障碍物。

所以我选择定义一个列表list,对于怪物,我觉得它们的共性就是都是gameobject,而且定义gameobject的话就可以不只是怪物,如果是别的物体,哪怕被捡起来(也是一种销毁)也可以进行判断,总之只要这个list最后空了,那就消灭障碍物。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 控制障碍物的销毁
/// GOlist里面就是销毁障碍物前需要摧毁的所有物件 不一定是同一类型
/// </summary>
public class ObstacleControl : MonoBehaviour
{
    public List<GameObject> GOlist = new List<GameObject>();
    private bool isDestroy;//障碍物损毁了吗

    void Start()
    {
        isDestroy = false;
    }

    void Update()
    {
        if (isDestroy) return;
        foreach(GameObject i in GOlist)
        {
            if (i != null)
            {
                return;
            }
        }
        //如果这些怪被消灭了 那就解除障碍物
        Destroy(this.gameObject);
        isDestroy = true;
    }
}

在unity界面只需要设置列表的大小,也就是你要销毁障碍物前需要消灭的怪物数量
然后把那些怪都丢进来就行了。
在这里插入图片描述


这个是之前到处查都没有找到方法,于是自己摸索的一种方法,如果有更好的方法欢迎指正,或者有游戏开发的一些问题可以一起讨论!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值