Skip to content

Latest commit

 

History

History
46 lines (38 loc) · 2.69 KB

17.ClassInheritanceMakesMoreEnemies.md

File metadata and controls

46 lines (38 loc) · 2.69 KB

简要

  • 17课是 Eagle创建 + Enemy的死亡 + C#继承方面的知识点, 我决定用 图片 + code 的形式表现出来, 达到快速浏览记忆的作用.
  • 请跟着图片以及图片上的箭头步骤走.
  • 你可能需要提前了解 : 敌人的创建, 动画创建, 动画事件.

方法步骤

  • 关于Eagle的创建.

    • 值得注意的是, 如果不希望Eagle在x轴有移动, 那么请像图片一样给'Constraints x'打勾.
  • Enemy的死亡.

    • 创建好了死亡动画之后, 可能不知道Animtor窗口该如何设置(因为死亡动画可以在任何时候触发).

代码

Enemy死亡原理: 当Player的coll与Enemy触碰的时候(通过tag检测), 如果Player是在Falling阶段, 可以销毁(其实可以写的更加精细), 然后在Enemy生成gameobject实例播放死亡动画, 当死亡动画结束后开启动画事件销毁该角色.

// In PlayerControll.cs..

private void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.gameObject.tag == "Enemy") {
        Enemy enemy = collision.gameObject.GetComponent<Enemy>(); //这里已经开始继承获取了...继承内容下面有.
        if (anim.GetBool("is_falling"))
        { 
            rb.velocity = new Vector2(rb.velocity.x, jumpForce * Time.deltaTime);
            anim.SetBool("is_jumping", true);
            SoundManager.Get().EnemDeath(); //这里已经实现了Sound的集成了..
            enemy.Death();
        }
    } 
}

因为Frog和Eagle都是同样的死亡机制, 那么我们可以通过继承的方式来让代码更加的整洁.
继承的原理: 就是创建一个Father类, 这个类中的成员Funcation是在子类中通用的, 那么当子类继承Father类的时候就可以调用Father类中的东西实现功能.
那么在这个Frog和Eagle中死亡动画和死亡的处理方式都是一样的, 我们现在来继承Enemy. ps: 想了想就是全部的Enemy代码,那么直接看源码中写注释吧.

// In Enemy_Eagle.cs file..
public class Enemy_Eagle : Enemy

// In Enemy_Frog.cs file..
public class Enemy_Frog : Enemy