Jaka jest dobra globalna strategia obsługi wyjątków dla Unity3D?

Rozglądam się za tworzeniem skryptów Unity3D i chciałbym skonfigurować globalny system obsługi wyjątków. Nie jest to możliwe do uruchomienia w wydanej wersji gry, intencją jest złapanie wyjątków w skryptach użytkownika, a także w skryptach edytora i upewnienie się, że są one przekazywane do bazy danych w celu analizy (a także do wysyłania wiadomości e-mail do odpowiednich deweloperów, aby mogli naprawić ich shizzle).

W waniliowej aplikacji C # miałbym try-catch wokół metody Main. W WPF zaczepiłbym jedną lub więcejnieobsłużone zdarzenia wyjątkowe. W jedności ...?

Jak dotąd najlepsze, co mogłem wymyślić, to coś takiego:

using UnityEngine;
using System.Collections;

public abstract class BehaviourBase : MonoBehaviour {

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        try
        {
            performUpdate();
            print("hello");
        }
        catch (System.Exception e)
        {
            print(e.ToString());
        }

    }

    public abstract void performUpdate();

}

W innych skryptach korzystam z BehaviourBase zamiast MonoBehavior i implementuję performUpdate () zamiast Update (). Nie zaimplementowałem wersji równoległej dla klauzul edytora, ale zakładam, że musiałbym zrobić to samo.

Nie podoba mi się jednak ta strategia, ponieważ będę musiał przenieść ją do wszystkich skryptów, które pobieramy ze społeczności (i będę musiał ją wymusić w zespole). Skrypty edytora nie mają ani jednego punktu wejścia porównywalnego z MonoBehavior, więc zakładam, że musiałbym zaimplementować wyjątkowe wersje kreatorów, edytorów i tak dalej.

Widziałem sugestie dotyczące przechwytywania wiadomości dziennika (w przeciwieństwie do wyjątków) za pomocąApplication.RegisterLogCallback, ale to sprawia, że ​​czuję się niekomfortowo, ponieważ musiałbym przeanalizować ciąg dziennika debugowania, zamiast mieć dostęp do faktycznych wyjątków i ścieżek stosu.

Więc ... co należy zrobić?

questionAnswers(5)

yourAnswerToTheQuestion