C# 将子脚本强制转换为父脚本并保持子脚本行为-统一

C# 将子脚本强制转换为父脚本并保持子脚本行为-统一,c#,unity3d,inheritance,C#,Unity3d,Inheritance,我对一些脚本有问题 父脚本: ParentScript : MonoBehavior { public void test() { // DoSomething } } 子脚本: ChildScript : ParentScript { public void test() { // DoSomethingSpecific } } 子脚本分配给特定的武器预制件,而父脚本分配给其他更基本的武器。 武器预制件储存在游戏对象列表中,对于每一件武器,我想获

我对一些脚本有问题

父脚本:

ParentScript : MonoBehavior {
   public void test() {
     // DoSomething
   }
}
子脚本:

ChildScript : ParentScript {
   public void test() {
     // DoSomethingSpecific
   }
}
子脚本分配给特定的武器预制件,而父脚本分配给其他更基本的武器。 武器预制件储存在游戏对象列表中,对于每一件武器,我想获得脚本并执行测试方法。以下是我为每种武器所做的尝试:

currentWeapon.GetComponent<ParentScript>().test();
但是,不幸的是,对于特定的武器,只调用父脚本测试函数,而不调用子脚本测试函数


您有更好的解决方案来管理此问题吗?

父级的方法应标记为虚拟,以便在子级中重写。 在子方法中,需要将其标记为覆盖,如下所示:

public class TestParent : MonoBehaviour
{
    virtual public void Test()
    {
        Debug.Log("InParent");
    }
}

public class TestChild : TestParent
{
    public override void Test()
    {
        Debug.Log("InChild");
    }
}

GetComponent<TestParent>().Test(); // show "inChild" if the component if a TestChild instance.
virtual关键字用于修改方法、属性、索引器或事件声明,并允许在派生类中重写它

重写修饰符是扩展或修改继承的方法、属性、索引器或事件的抽象或虚拟实现所必需的

参考:

这个问题与我无关。这是