学习资源:B站 M_Studio《Unity教程2D入门》17

Unity Assets:Sunnyland

Day12

调用frog死亡动画效果

这里我没有完全按照教程的方法,是自己写的。

思路如下:

  1. 为frog添加death动画
  2. 在原来脚本中,player下落触发frog消失的地方,改成触发frog的death动画
  3. 触发动画后,再销毁frog实例

PlayerController.cs

         //如果是下落状态if (anim.GetBool("isFalling")){frogAnim.SetBool("isDead", true);//敌人才会消失//Destroy(collision.gameObject);//踩完后垫着敌人小跳一下rb.velocity = new Vector2(rb.velocity.x, jumpforce * Time.deltaTime);anim.SetBool("isJumping", true);}

注意:此处就不能直接Destroy,因为setbool只是改变参数的值,真正触发动画效果应该是在这整个函数结束以后。如果这里就销毁对象,还是相当于直接让青蛙消失。
考虑到逻辑是触发死亡动画->销毁对象,可以在死亡动画的末尾添加动画事件。

EnemyFrog.cs中添加该函数:

 void DestroySelf(){Destroy(gameObject);}

为death添加事件:

改进1:
任何状态都可能触发死亡——不需要每条都连线。
直接连Any State就好了。

改进2:
写完以后,看了一下教程。觉得SetTrigger比SetBool好用。
因为SetBool只能改变参数不能立刻改变动画效果,而SetTrigger可以立刻改变动画。
首先,要将Death设置为一个trigger开关。

切换条件:

调用其他Class的变量

我们知道,触发敌人死亡的效果是在player的脚本中实现的,但又需要用到敌人的animator,在上面的方法中我用的是public,但教程中用的则是另一种方法,因为算是新知识点,所以这里也记录一下。

这样就可以直接获取frog类,
调用这个类中的所有public函数。

EnemyFrog Frog = collision.gameObject.GetComponent<EnemyFrog>();

我们可以设置DestroySelf函数为public,就可以直接在该脚本当中调用。

问题:这样的方法只能获取frog,那如果有多种敌人的时候呢?比如除了青蛙还有老鹰?

解决方法:将青蛙和老鹰放在一个类下,直接调用父级函数。

Monobehavior:主类

EnemyFrog.cs 继承自 Enemy类

public class EnemyFrog : Enemy

Enemy中protected类型的变量/函数,就只可以在子类和父类中使用。

步骤

  1. 新建一个脚本Enemy
  2. 让所有的敌人类继承Enemy类

希望父级的函数可以被子级调用:Protected
希望父级的函数可以被子级重新改写:Virtual
希望子级中的函数是改写自父级的:override
希望子级使用父级的Start函数:base.Start();

具体代码如下:
Enemy.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Enemy : MonoBehaviour
{protected Animator anim;protected virtual void Start(){anim = GetComponent<Animator>();}public void setDeath(){anim.SetTrigger("Death");}public void DestroySelf(){Destroy(gameObject);}
}

EnemyFrog.cs(只copy有修改部分)
(原来设置的私有变量anim就可以删去了)
(其实还有eagle敌人的,这里就先不做了)

 protected override void Start(){base.Start();rb = GetComponent<Rigidbody2D>();//anim = GetComponent<Animator>();coll = GetComponent<Collider2D>();leftx = leftPoint.position.x;rightx = rightPoint.position.x;Destroy(leftPoint.gameObject);Destroy(rightPoint.gameObject);Movement();}

PlayerController中修改这两处,就可以对敌人的死亡状态进行统一管理。
(当然,前提是每种敌人的死亡效果都一样。教程里就是所有敌人共用一个死亡效果——爆炸效果)

Unity2D学习笔记Day12:敌人统一死亡动画+Class的继承(含虚函数virtual,重写override)相关推荐

  1. unity2D学习笔记-角色动画

    unity2D学习笔记-角色动画 角色移动 动画效果(重点!!!!!) 创建:Animator与Animation 状态转换 跳跃 从fall到idle Hierarchy中创建一个Sprite作为载 ...

  2. D3D角色动画学习笔记(一)——角色动画简介与初步规划

    D3D角色动画学习笔记(一)--角色动画简介与初步规划 写这个系列是基于自己学习角色动画之后,相对自己的成果做一个整理,还可以给大家做一个角色动画的预览,可能会节省大家的一点时间,同时也希望各位大神能 ...

  3. JavaScript学习笔记(四)---闭包、递归、柯里化函数、继承、深浅拷贝、设计模式

    JavaScript学习笔记(四)---闭包.递归.柯里化函数.继承.深浅拷贝.设计模式 1. 匿名函数的使用场景 2.自运行 3.闭包 3.1前提: 3.2闭包 4.函数对象的三种定义方式 5.th ...

  4. MATLAB/simulink学习笔记(二)——对正弦函数判断的正负以及分段函数仿真

    关注"小西的学习笔记"公众号 获得更多资料

  5. C++学习笔记:(六)public、protected、private继承详解

    前言 上一篇学习了继承的基础概念以及示例代码.算是对继承有了一个简单的了解.如果想要对继承有更深的了解,就要复习访问权限的知识点.这样才能深化对继承的了解,以及学习不同的继承方式能对哪些数据进行操作. ...

  6. Unity2D学习笔记Day9:添加敌人——受伤效果及反弹效果(补8.16)

    学习资源:B站 M_Studio<Unity教程2D入门>14 Unity Assets:Sunnyland Day9 受伤并反弹 预期效果:若在地面上碰到敌人,会触发受伤动画并反弹. p ...

  7. Unity2D学习笔记Day14:靠近门时弹出对话框并播放录制动画

    学习资源:B站 M_Studio<Unity教程2D入门>19 Unity Assets:Sunnyland Day14 预期效果:当player靠近门时,出现提示对话框,按E即可进入. ...

  8. Unity2d学习笔记(一)添加角色地图并且实现人物移动

    写这个系列的目的 最近在学习unity2d游戏制作,这个系列的文章就是想将我学到的知识记录下来,方便自己以后复习回顾. Unity2d基础知识 众所周知,Unity是一个游戏引擎,就我的理解来说,游戏 ...

  9. Unity2D学习笔记Day13:添加音效Audio

    学习资源:B站 M_Studio<Unity教程2D入门>18 Unity Assets:Sunnyland Day13 Audio Listener:耳朵,用来听声音的--一般放在mai ...

最新文章

  1. PAT 1057. 数零壹
  2. 很简单的自定义友好链接实现 .net core 2
  3. 机器学习系列(2)_从初等数学视角解读逻辑回归
  4. simplePagination API
  5. 企业有了程序员为什么还要用 低代码/无代码
  6. 企业微信小程序_授权登录接口获取用户userid
  7. 深度学习(四)卷积神经网络入门学习(1)
  8. java怎么检测代码安全_foritfy代码安全审计、foritfy代码检测服务、java代码安全审计检测、C/C++语言代码安全审计检测...
  9. 网红店主质疑拼多多销售假冒货品 官方:均为正品 再遭恶意污蔑
  10. 条件语句和循环语句_总结一下条件语句和循环语句
  11. Java线程面试题 Top 50 (转载)
  12. 【15】万魂杀服务器开发之原始NIO、Mina、Netty使用
  13. java character_[转载]Java中Character类的使用方法
  14. 渗透测试工程师基础入门
  15. 通过举例彻底搞懂Matlab中max函数和min函数的用法(求最大值和最小值)
  16. mysql启动报错:由于找不到vcruntime140_1.dll,无法继续执行代码
  17. 如何从零开始解读什么叫产品经理
  18. linux 内核 修改mss,[转载]linux 内核对于TCPMSS的处理
  19. word插入标题之后自动跳到下一页怎么解决?
  20. 基本图形:直线(Line)

热门文章

  1. 百度地图汽车物流数智化应用方案,推进整车运输行业全链条数字化发展
  2. (转)熊绎:我看软件工程师的职业规划
  3. 向量代数,直线,平面
  4. 吐血整理《上海市居住证》积分申请指南
  5. VC浏览器的定制与扩展
  6. 计算机只报数字怎么调成音乐,电脑怎么设置一锁屏音乐就停?
  7. 用例图包含关系、扩展关系、泛化关系解析
  8. SpringCloud学习笔记7——初级篇之服务降级
  9. self-startup command line(or CLI) in windows
  10. 萨班斯-奥克斯利法案 (SOX) 特权账号管理