Возможно ли совместить update абстрактного класса с наследником?

У меня есть несколько классов врагов, которые наследуются от абстрактного класса. Мне нужно в Update у каждого класса писать _currentFramesInvulnerability -= Time.deltaTime;. Возможно ли указать это в абстрактном классе, если в наследуемых классах врагов в update есть еще другие строки кода? Сначала я подумал про override, но если я правильно понимаю, то тогда эта строка не будет выполняться.


Ответы (2 шт):

Автор решения: Алексей Шиманский

Делается просто: добавляется абстрактный метод, например AdditionalUpdateOp, который все наследники должны реализовать. А в методе Update абстрактного класса пишется:

_currentFramesInvulnerability -= Time.deltaTime;
AdditionalUpdateOp();

Собственно всё. В наследниках просто реализуется метод AdditionalUpdateOp никак не трогая никогда Update.

→ Ссылка
Автор решения: Yaroslav
public abstract class Enemy : MonoBehaviour 
{
    private float _currentFramesInvulnerability;

    protected virtual Update ()    
    {
        _currentFramesInvulnerability -= Time.deltaTime;
    }
}
public class Goblin : Enemy 
{
    protected override Update ()
    {
        base.Update(); // вызов метода Update класса, от которого наследуется текущий
        // Do some
    }
}

Но это плохая практика, если код virtual метода должен быть обязательно исполнен, необходимо следовать своему же контракту явным образом.

public abstract class Enemy : MonoBehaviour 
{
    private float _currentFramesInvulnerability;

    private Update ()
    {
        _currentFramesInvulnerability -= Time.deltaTime;
        OnFrameTick();
    }

    protected abstract OnFrameTick ();
}
public class Goblin : Enemy 
{
    protected override OnFrameTick ()
    {
        // Do some
    }
}
→ Ссылка