Вы можете использовать события , чтобы четко достичь того, что вы хотите.Ниже приведен пример события, которое может оказаться полезным.Другие объекты могут прослушивать событие, и как только оно будет запущено, они будут уведомлены.
[Serializable]
public class PlaneEvent : UnityEvent<Plane> { }
После того, как вы определили свое событие, вы можете добавить его в качестве поля на вашем самолете.Как только ваш самолет будет уничтожен, вы можете запустить событие, и оно, в свою очередь, уведомит любого, кто его слушает!
public class Plane : MonoBehaviour {
public PlaneEvent OnDestroyed;
public void Destroy () {
Destroy(gameObject);
OnDestroyed.Invoke(this);
OnDestroyed.RemoveAllListeners();
}
}
Теперь в нашем классе партитур мы добавим метод, который будет вызываться один раз.событие плоскости OnDestroyed
запускается.
public class Score : MonoBehaviour {
public void AddPointsFor (Plane plane) {
Debug.Log("A Plane was destroyed!");
//Tick a counter, add points, do whatever you want!
}
}
Как только у нас есть эти кусочки, легко заставить их работать вместе.Мы берем самолет и добавляем счет в качестве слушателя на событие OnDestroyed
.Затем, когда самолет уничтожен, событие запускается и счет подсчитывается для добавления очков.
public class Game : MonoBehaviour {
[SerializeField]
private Score _score;
[SerializeField]
private Plane _plane;
public void Start () {
// When you are destroyed let me know so I can add some points.
_plane.OnDestroyed.AddListener(_score.AddPointsFor);
_plane.Destroy();
}
}
Еще одно большое преимущество в использовании событий - ваш самолет даже не подозревает, что счет даже существует, он позволит любомукто заботится, знает, что он был уничтожен.Таким же образом это событие может также использоваться для запуска эффектов частиц, анимации и звуковых эффектов, когда самолет разрушен, и все, что вам нужно сделать, это добавить больше слушателей.