簡體   English   中英

如何調用函數或類來覆蓋現有函數?

[英]How to call functions or classes to override existing functions?

我正在創建一個紙牌游戲,其中每張紙牌都有自己的 function。 我在 ScriptableObjects 中創建了所有數據庫。 所以我在“CardBG”中調用這些操作系統 class 並添加一些虛擬功能

public class CardBG : MonoBehaviour

   protected virtual void OnDamage()
    {
    }
    
    protected virtual void OnDie()
    {
    }
    
    protected virtual void OnAttack()
    {
    }
    
    protected virtual void OnEndTurnP1()
    {
    }

我的想法是為每張卡片創建一個腳本來覆蓋這些“CardBG”函數。 問題是最初我試圖在操作系統中添加這個腳本,但似乎不可能。 所以我不知道如何為每個不同的字母調用這些腳本。

您不能將組件引用分配給可編寫腳本的 object 資產字段,但您可以執行相反的操作:將可編寫腳本的 object 資產分配給組件字段。

因此,您可以做的是反轉事情並將您的虛擬方法及其覆蓋移動到可編寫腳本的對象中。 然后,例如在您的卡組件上調用 OnDamage 時,它​​可以在分配給它的任何可編寫腳本的 object 中調用相應的方法,並將自身作為參數傳遞。

public class CardComponent : MonoBehaviour
{
    public Card card;
    public float health;
    
    public void OnDamage() => card.OnDamage(this);
    public void OnDie() => card.OnDie(this);
    public void OnAttack() => card.OnAttack(this);
    public void OnEndTurnP1() => card.OnEndTurnP1(this);
}

public abstract class Card : ScriptableObject
{
    public virtual void OnDamage(CardComponent component) { }
    public virtual void OnDie(CardComponent component) { }
    public virtual void OnAttack(CardComponent component) { }
    public virtual void OnEndTurnP1(CardComponent component) { }
}

[CreateAssetMenu]
public class BossCard : Card
{
    public override void OnAttack(CardComponent component) => component.health -= 10000;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM