首页 > 其他分享 >unity3D怪物的死亡与刷新09

unity3D怪物的死亡与刷新09

时间:2023-03-04 21:46:52浏览次数:38  
标签:unity3D 动画 activeMonster void 09 private 怪物 public

死亡动画播放后,下次射击之前消失

MonsterManager

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MonsterManager : MonoBehaviour
{
    //3.定义动画
    private Animation anim;
    //5.定义两个动画状态
    public AnimationClip idleClip;
    public AnimationClip dieClip;
    private void Awake()
    {
        //4.获得动画组件
        anim = gameObject.GetComponent<Animation>();
        //6.赋值动画
        anim.clip = idleClip;

    }

    //1.检测是否被子弹打中
    private void OnCollisionEnter(Collision collision)
    {
        if(collision.collider.tag == "Bullet")
        {
            //2.销毁子弹
            Destroy(collision.collider.gameObject);
            //7.切换动画
            anim.clip = dieClip;
            anim.Play();

            //10.关闭组件
            gameObject.GetComponent<BoxCollider>().enabled = false;
            StartCoroutine("Deactivate");
        }
    }
    //8.当怪物disable的时候,将默认的动画修改为idle动画
    private void OnDisable()
    {
        anim.clip = idleClip;
    }

    //9.迭代器
    IEnumerator Deactivate()
    {
        //两次射击间隔为1s 所以这里时间小于1s
        yield return new WaitForSeconds(0.8f);
        //使当前的怪物变为未激活状态,并使整个循环重新开始。TargetManager.cs
        TargetManager._instance.UpdateMonsters();
    }
}

TargetManager

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TargetManager : MonoBehaviour
{
    //16.方便其他文件调用
    public static TargetManager _instance;
    //1.获取我们设置的四种怪物:控制怪物的生成或销毁(显示或隐藏) 最开始是都不显示
    //2.建立数组
    public GameObject[] monsters;
    //6.获得激活状态的怪物
    public GameObject activeMonster = null;

    //17.赋值
    private void Awake()
    {
        _instance = this;
    }

    //9.调用测试
    private void Start()
    {
        //10.遍历初始化目标怪的状态以及boxcollider状态
        foreach (GameObject monster in monsters)
        {
            monster.GetComponent<BoxCollider>().enabled = false;
            monster.SetActive(false);
        }
        //ActiveMonster();
        //12.调用迭代器方法:先注释上一句的直接调用
        StartCoroutine("AliveTimer");

    }

    //3.是否激活各种状态函数
    private void ActiveMonster()
    {
        //4.随机激活:得到index
        int index = Random.Range(0, monsters.Length);

        //5.激活怪物:需要先获得激活状态的怪物
        //赋值
        activeMonster = monsters[index];
        //7.激活
        activeMonster.SetActive(true);
        //8.激活box collider
        activeMonster.GetComponent<BoxCollider>().enabled = true;
        //14.调用
        StartCoroutine("DeathTimer");
    }
    //11.协程控制迭代器 设置怪物生成的等待时间
    IEnumerator AliveTimer()
    {
        yield return new WaitForSeconds(Random.Range(1, 5));
        ActiveMonster();

    }

    //14.控制死亡迭代器 使激活状态的怪变为未激活状态
    private void DeActiveMonster()
    {
        if (activeMonster != null)
        {

            activeMonster.GetComponent<BoxCollider>().enabled = false;
            activeMonster.SetActive(false);
            activeMonster = null;
        }
        //14.再次激活
        StartCoroutine("AliveTimer");
    }
    //设置死亡时间
    IEnumerator DeathTimer()
    {
        yield return new WaitForSeconds(Random.Range(3, 8));
        DeActiveMonster();
    }

    //15.更新怪物 在其他脚本中调用此方法
    public void UpdateMonsters()
    {
        if (activeMonster != null)
        {
            //关闭所有协程
            StopAllCoroutines();
            activeMonster.SetActive(false);
            activeMonster = null;
            StartCoroutine("AliveTimer");
        }
    }
}

标签:unity3D,动画,activeMonster,void,09,private,怪物,public
From: https://www.cnblogs.com/flyall/p/17179240.html

相关文章

  • unity3D设置手枪的动画与子弹的自动销毁07
    取消手枪自动播放动画usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassGunManager:MonoBehaviour{//1.枪旋转......
  • unity3D控制手枪的旋转05
    新建脚本文档要达到鼠标控制手枪的旋转确定枪的旋转角度usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassGunManage......
  • csp201809-4
    这是一道差分约束求最长路的图的问题:通过已知的条件可以容易列出以下不等式:2*a1<=x1+x2<=2*a1+13*a2<=x1+x2+x3<=3*a2+23*a3<=x2+x3+x4<=3*a3+2       ......
  • unity3D使用协程控制怪物的生命周期
    分析九个坑位要随机生成怪物,随机时间生成类似打地鼠协程(Coroutines)协程:协程是一个分部执行,遇到条件(yieldreturn语句)时会挂起,直到条件满足时才会被唤醒继续执行后面的......
  • unity3D控制怪物的随机生成
    对target创建脚本逻辑梳理控制目标显示与隐藏控制被射击是否显示死亡动画创建怪物数组usingSystem.Collections;usingSystem.Collections.Generic;usingUni......
  • [oeasy]python0099_雅达利大崩溃_IBM的开放架构_兼容机_oem
    雅达利大崩溃回忆上次内容个人计算机浪潮已经来临苹果公司迅速发展微软公司脱离mits准备做纯软件公司IBM用大型机思路制作的5100惨败Commodore64既做......
  • unity3D
    第一部分:游戏基本功能的实现(场景的搭建、协程的使用、碰撞器、UGUI)第二部分:游戏的存档与读档的实现(PlayerPrefs、XML、JSON)1.搭建场景找到图片后右键此处可初始化......
  • MyBatis_09(逆向工程)
    MyBatis的逆向工程正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成......
  • [oeasy]python0098_个人计算机浪潮_IBM5100_微软成立_苹果II_VisCalc
    个人计算机浪潮回忆上次内容个人电脑(PC)在爱好者之间疯传人人都有一台计算机从attair-8800到apple-1个人电脑离普通人更近了如果人人都有自己的电脑谁还去用终端连......
  • lc.209 长度最小的子数组
    题目给定一个含有n个正整数的数组和一个正整数target。找出该数组中满足其和≥target的长度最小的连续子数组[numsl,numsl+1,...,numsr-1,numsr],并返回其......