如何覆盖专门针对单元上的类型的组件函数?

我有一个 Health 类,它有方法 TakeDamage() 和 Die()。我的 Enemy 类有一个 Health 组件,所以当我的 Enemy 受到伤害时 Health.TakeDamage() 正在执行。我如何去覆盖 Die() 方法以对不同类型的敌人进行不同的工作。

雨果

创建一个基类

public abstract class Health : MonoBehaviour
{
    // make a member e.g. protected so it is not public but still accesible by inherited classes 
    protected float health = 100f;

    // Now you either can make the method abstract
    // This means every inheritor later HAS to implement this method
    public abstract void Die();

    // or you can make it virtual
    // This means this class already provides an implementation
    // but an inheritor could 
    //  a) simply use it
    //  b) extend it or 
    //  c) completely overrule it
    public virtual void TakeDamage()
    {
        Debug.Log("Ouch!");
        health -= 1;
    }
}

注意:如果您的Health类没有任何abstract方法,您可能还希望abstract从类定义本身中删除关键字并使其仅public class Health : MonoBehaviour. 但是,如果您想严格防止基Health类本身被实例化,您可能希望保留它以确保只有继承类型的组件可能存在。


现在你可以创建不同的实现,Health要么根本不改变它

public class NormalHealth : Health
{
    // since it is abstract we have to implement Die
    public override void Die()
    {
        // whatever happens here
    }

    // But if we want to use the default TakeDamage we just do nothing
}

或覆盖默认行为

public class WeakHealth : Health
{
    // Since it is abstract we have to implement Die
    public override void Die()
    {
        // whatever happens here
    }

    // Now we replace the TakeDamage
    public override void TakeDamage()
    {
        // by not calling base.TakeDamage we don't execute the base implementation at all
        Debug.Log("Huge Ouch!");
        health -= 10;
    }
}

或扩展它而不是替换它

public class HealthWithSound : Health
{
    public AudioSource someAudioSource;
    public AudioClip someClip;

    // Since it is abstract we have to implement Die
    public override void Die()
    {
        // whatever happens here
    }

    // This time we only extend the base's TakeDamage with e.g. sound
    public override void TakeDamage()
    {
        base.TakeDamage();

        someAudioSource.PlayOneShot(someClip);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何分别专门针对整数和浮点类型的模板函数?

来自分类Dev

如何专门针对特定泛型类型的方法?

来自分类Dev

C ++专门针对枚举的函数

来自分类Dev

C ++专门针对特定类型的lambda

来自分类Dev

专门针对哪个函数重载的规则

来自分类Dev

如何专门设计用于返回不同类型的模板函数?

来自分类Dev

如何专门针对一种类型的可变参数模板类?

来自分类Dev

C ++:如何专门针对类似于数组数组的类A的成员函数来处理A <A <T>>?

来自分类Dev

如何专门针对SQL表的某些行?

来自分类Dev

如何在扩展组件上覆盖className?

来自分类Dev

如何在不重载比较运算符的情况下专门针对std :: max的自定义类型?

来自分类Dev

如何基于类型相关的类型专门化C ++模板类函数?

来自分类Dev

如何在 React 中构建专门的组件

来自分类Dev

如何使C ++模板化函数与返回类型无关,以便将来进行专门化

来自分类Dev

如何在任意依赖类型上专门化模板

来自分类Dev

在C ++ 11中,我如何专门化基于返回类型接受函数对象的函数模板?

来自分类Dev

C++ - 在具有非类型模板参数的模板化类上专门化函数模板

来自分类Dev

如何专门化模板成员函数?

来自分类Dev

如何从react.js中的父组件覆盖子组件的事件处理函数

来自分类Dev

如何从react.js中的父组件覆盖子组件的事件处理函数

来自分类Dev

如何获取单元格引用以针对Excel中的indirect()函数自动更新?

来自分类Dev

函数指针类型和值的部分类专门化

来自分类Dev

通过参数C ++的类型专门研究重载的构造函数

来自分类Dev

如何覆盖用于测试的模式上的Mongoose findOne()函数?

来自分类Dev

如何使用 WordPress 插件上的构造函数覆盖类?

来自分类Dev

如何覆盖属性类型?

来自分类Dev

专门针对void参数的模板

来自分类Dev

在针对它运行“ indexOf”函数之前,如何检查EL变量的类型?

来自分类Dev

迅捷:如何编写调用专门函数的泛型函数

Related 相关文章

  1. 1

    如何分别专门针对整数和浮点类型的模板函数?

  2. 2

    如何专门针对特定泛型类型的方法?

  3. 3

    C ++专门针对枚举的函数

  4. 4

    C ++专门针对特定类型的lambda

  5. 5

    专门针对哪个函数重载的规则

  6. 6

    如何专门设计用于返回不同类型的模板函数?

  7. 7

    如何专门针对一种类型的可变参数模板类?

  8. 8

    C ++:如何专门针对类似于数组数组的类A的成员函数来处理A <A <T>>?

  9. 9

    如何专门针对SQL表的某些行?

  10. 10

    如何在扩展组件上覆盖className?

  11. 11

    如何在不重载比较运算符的情况下专门针对std :: max的自定义类型?

  12. 12

    如何基于类型相关的类型专门化C ++模板类函数?

  13. 13

    如何在 React 中构建专门的组件

  14. 14

    如何使C ++模板化函数与返回类型无关,以便将来进行专门化

  15. 15

    如何在任意依赖类型上专门化模板

  16. 16

    在C ++ 11中,我如何专门化基于返回类型接受函数对象的函数模板?

  17. 17

    C++ - 在具有非类型模板参数的模板化类上专门化函数模板

  18. 18

    如何专门化模板成员函数?

  19. 19

    如何从react.js中的父组件覆盖子组件的事件处理函数

  20. 20

    如何从react.js中的父组件覆盖子组件的事件处理函数

  21. 21

    如何获取单元格引用以针对Excel中的indirect()函数自动更新?

  22. 22

    函数指针类型和值的部分类专门化

  23. 23

    通过参数C ++的类型专门研究重载的构造函数

  24. 24

    如何覆盖用于测试的模式上的Mongoose findOne()函数?

  25. 25

    如何使用 WordPress 插件上的构造函数覆盖类?

  26. 26

    如何覆盖属性类型?

  27. 27

    专门针对void参数的模板

  28. 28

    在针对它运行“ indexOf”函数之前,如何检查EL变量的类型?

  29. 29

    迅捷:如何编写调用专门函数的泛型函数

热门标签

归档