(Unity) Как предотвратить переопределение функции MonoBehavior Awake () у детей - PullRequest
0 голосов
/ 14 октября 2019

Можно ли отключить опцию переопределения функций MonoBehavior, таких как Start (), Awake (), Update () и т. Д. ... в классе детей?

причинаДело в том, что когда над проектом Unity работают несколько человек, кто-то, кто не знает об этой проблеме, может отключить важную инициализацию, определенную в родительском элементе, что может вызвать нежелательное поведение, которое трудно отладить.

Мне кажется, что это происходитпротив принципов ООП, так как вы можете много чего испортить в других местах. При попытке сделать это вы даже не увидите предупреждение в Visual Studio.

public class A: MonoBehavior
{
  void Awake()
  {
    // Do some stuff
  }
}

public class B: A
{
  void Awake()
  {
    // This actually overrides stuff that Awake() does in parent class
  }
}

Ответы [ 2 ]

2 голосов
/ 14 октября 2019

Решение простое и придерживается принципов ООП. Любой класс, который, по вашему мнению, мог бы иметь детей в будущем, определите в нем заглушки

protected virtual void Awake() {}
protected virtual void Start() {}
protected virtual void OnEnable() {}

.... «переопределение» IDE, безусловно, уведомит их о наличии базовой реализации обратного вызова.

0 голосов
/ 14 октября 2019

Я думаю, что изоляция метода Awake() от вашего class A должна быть тем, что вы ищете:

public class A: MonoBehavior
{
  public sealed override void Awake()
  {
    // Do some stuff
  }
}

Теперь, когда вы попытаетесь переопределить этот метод в вашем class B, это не толькодать предупреждение IDE, но оно не скомпилируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...