मेरे लिए यह समझाना कठिन है लेकिन मैं स्थिति को समझाने की पूरी कोशिश करूंगा। मेरे पास दो वर्ग हैं। IntroductionState और State_episode1IntroductionState को State_episode1 से विरासत में मिला है। मैं कई State_episode1 व्युत्पन्न वर्ग बना रहा हूं जो Start() कहते हैं, लेकिन मैं चाहता हूं कि प्रत्येक व्युत्पन्न वर्ग अपने स्वयं के कस्टम MyStartCoroutine() को कॉल करे, इसलिए जब आधार Start() विधि को कॉल किया जाता है तो यह इसके बजाय होगा व्युत्पन्न कस्टम विधि को कॉल करें। क्या ऐसा करने का कोई आसान तरीका है या क्या मुझे हर व्युत्पन्न वर्ग के लिए बस पेस्ट स्टार्ट() विधि कॉपी करनी चाहिए?

जब मैं StartCoroutine(MyStartCoroutine()) को कॉल करने का प्रयास कर रहा हूं, तो निम्न कोड एक त्रुटि "कोई कोरआउट शुरू नहीं हुआ" फेंकता है:

public class State_episode1
{
    public StateMachine_Episode1 Ep1;

    public State_episode1(StateMachine_Episode1 ep1)
    {
        Ep1 = ep1;
    }

    //start begins a coroutine which first has to set _state=2 for the state machine to continue
    public IEnumerator Start()
    {
        Ep1._state = 1;
        yield return Ep1.StartCoroutine(MyStartCoroutine());
        Ep1._state = 2;
    }
    public IEnumerator MyStartCoroutine()
    {
        Debug.Log("no coroutine started");
        yield return new WaitForSeconds(1);
    }
}

public class IntroductionState: State_episode1
{
    public IntroductionState(StateMachine_Episode1 ep1) : base(ep1)
    {
    }
    public new IEnumerator MyStartCoroutine()
    {
        return base.MyStartCoroutine();
    }
}
1
Michael Effraimidis 15 अप्रैल 2020, 17:20

1 उत्तर

सबसे बढ़िया उत्तर

आधार विधि को अतिश्योक्तिपूर्ण के रूप में चिह्नित करने के लिए आधार वर्ग में virtual का उपयोग करें:

public virtual IEnumerator MyStartCoroutine()
{
    Debug.Log("no coroutine started");
    yield return new WaitForSeconds(1);
}

और आधार विधि के ओवरराइड को इंगित करने के लिए व्युत्पन्न विधि पर new के बजाय override का उपयोग करें:

public override IEnumerator MyStartCoroutine()
{
    return base.MyStartCoroutine();
}

new एक "नई" विधि बनाता है जो बेस क्लास विधियों से स्वतंत्र है। override रनटाइम को आधार विधि के बजाय व्युत्पन्न विधि का उपयोग करने के लिए कहता है।

4
D Stanley 15 अप्रैल 2020, 14:25