如何在c#Unity中从另一个脚本扩展类

早期73

我正在尝试在播放器对象上扩展基类。
玩家的伤害脚本如下所示

using UnityEngine;
using System.Collections;

public class Damage : MonoBehaviour 
{

    public int health = 100;

    public virtual void ReceiveDamage(int damageAmount)
    {
        Debug.Log ("Original");
    }
}

然后同一位玩家具有另一个脚本,如下所示:

using UnityEngine;
using System.Collections;

public class playerDamage : Damage 
{
    public override void ReceiveDamage(int damageAmount)
    {
        Debug.Log ("Extended");     
    }
}

但是,当我从第三个脚本在另一个对象上调用脚本时,如下所示:

var damageScript = collision.gameObject.GetComponent<Damage>();
if( damageScript)
{
    damageScript.ReceiveDamage(damageAmount);
}

对日志的唯一响应是“原始”,是否应该叫孩子并将其“扩展”写入日志?

apxcode

有几种方法可以做到这一点。最简单的方法是SendMessage

collision.gameObject.SendMessage("ReceiveDamage", damageAmount);

无论ReceivedDamage碰撞GameObject具有哪种实现,都将被称为该实现。这很棒,因为您不需要自己指定类型也不需要使用GetComponent。


重要的额外信息

在您选择的任何实现中,关键步骤是确保将正确的脚本附加collision.gameObject如果同时附上两个脚本,那么您就玩火了。

为了避免玩火请Damageabstract类。

public abstract class Damage : MonoBehaviour 
{
    public int health = 100;

    public virtual void ReceiveDamage(int damageAmount)
    {
       Debug.Log ("Original");
    }
}

抽象将为您提供所需的功能,除了Unity3d不允许您附加DamageGameObjects之外,这是避免错误的好方法。您始终可以选择拥有原始文件,ReceiveDamage并可以选择在继承自的将来的类上覆盖原始文件Damage,如下所示:

public class Example : Damage
{
    // This one still has ReceiveDamage but it happens in the base class.
}

或者

public class PlayerDamage : Damage 
{
    public override void ReceiveDamage(int damageAmount)
    {
       Debug.Log("Extended");
    }
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在C#中访问另一个类中某个类的私有函数?

来自分类Dev

如何在另一个类中使用扩展功能?C#

来自分类Dev

我的脚本如何在远程会话中的另一个脚本中调用函数?

来自分类Dev

如何在另一个类中调用一个类的main()方法?

来自分类Dev

Unity C#,如何从另一个脚本调用函数以启动动画?

来自分类Dev

Typescript在另一个文件中扩展类

来自分类Dev

如何在另一个类的红宝石中隐藏一个类

来自分类Dev

如何创建一个类,另一个类在react js中扩展了该类

来自分类Dev

如何在Unity C#脚本中引用另一个项目

来自分类Dev

如何在Office脚本中调用另一个脚本?

来自分类Dev

如何通过另一个类在链中扩展顶级选择器

来自分类Dev

QT C ++-如何在另一个类中引用窗口小部件

来自分类Dev

如何在Java中扩展2个类?我需要扩展JFrame和另一个类

来自分类Dev

如何验证泛型在Java中扩展了另一个类/接口?

来自分类Dev

如何在虚幻脚本中使用另一个类中的变量?

来自分类Dev

如何在一个类中的另一个函数中更新变量?

来自分类Dev

从另一个脚本访问类中的类?

来自分类Dev

从另一个脚本访问类中的类?

来自分类Dev

我的脚本如何在远程会话中的另一个脚本中调用函数?

来自分类Dev

如何在由另一个shell脚本启动的shell脚本中获取`pwd`

来自分类Dev

如何在另一个Perl脚本中运行一个Perl脚本

来自分类Dev

如何在C ++中将指向一个类的指针复制到另一个类中?

来自分类Dev

如何从另一个类扩展类(Java)

来自分类Dev

如何扩展另一个目录中的类?

来自分类Dev

我如何在另一个活动中执行一个类

来自分类Dev

如何在另一个类 C# Windows Forms 中引用一个类

来自分类Dev

如何在C#中的另一个方法中调用同一类中的方法?

来自分类Dev

如何在一个类中声明另一个类的实例

来自分类Dev

如何在另一个文件目录中的另一个脚本中导入 Python 文件?

Related 相关文章

  1. 1

    如何在C#中访问另一个类中某个类的私有函数?

  2. 2

    如何在另一个类中使用扩展功能?C#

  3. 3

    我的脚本如何在远程会话中的另一个脚本中调用函数?

  4. 4

    如何在另一个类中调用一个类的main()方法?

  5. 5

    Unity C#,如何从另一个脚本调用函数以启动动画?

  6. 6

    Typescript在另一个文件中扩展类

  7. 7

    如何在另一个类的红宝石中隐藏一个类

  8. 8

    如何创建一个类,另一个类在react js中扩展了该类

  9. 9

    如何在Unity C#脚本中引用另一个项目

  10. 10

    如何在Office脚本中调用另一个脚本?

  11. 11

    如何通过另一个类在链中扩展顶级选择器

  12. 12

    QT C ++-如何在另一个类中引用窗口小部件

  13. 13

    如何在Java中扩展2个类?我需要扩展JFrame和另一个类

  14. 14

    如何验证泛型在Java中扩展了另一个类/接口?

  15. 15

    如何在虚幻脚本中使用另一个类中的变量?

  16. 16

    如何在一个类中的另一个函数中更新变量?

  17. 17

    从另一个脚本访问类中的类?

  18. 18

    从另一个脚本访问类中的类?

  19. 19

    我的脚本如何在远程会话中的另一个脚本中调用函数?

  20. 20

    如何在由另一个shell脚本启动的shell脚本中获取`pwd`

  21. 21

    如何在另一个Perl脚本中运行一个Perl脚本

  22. 22

    如何在C ++中将指向一个类的指针复制到另一个类中?

  23. 23

    如何从另一个类扩展类(Java)

  24. 24

    如何扩展另一个目录中的类?

  25. 25

    我如何在另一个活动中执行一个类

  26. 26

    如何在另一个类 C# Windows Forms 中引用一个类

  27. 27

    如何在C#中的另一个方法中调用同一类中的方法?

  28. 28

    如何在一个类中声明另一个类的实例

  29. 29

    如何在另一个文件目录中的另一个脚本中导入 Python 文件?

热门标签

归档