Я изучаю некоторые скриптовые материалы Unity3D, и я бы хотел настроить глобальную систему обработки исключений. Это не для запуска в версии релиза игры, целью является исключение из пользовательских сценариев, а также в сценарии редактора и их перенаправление в базу данных для анализа (а также для отправки электронной почты соответствующим разработчикам, чтобы они могли исправить их shizzle).
В приложении с ванилью С# у меня будет try-catch вокруг метода Main. В WPF я зацепил один или несколько необработанных событий исключения. В единстве...?
Пока лучшее, что мне удалось найти, это что-то вроде этого:
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();
}
В других сценариях я получаю BehaviourBase вместо MonoBehavior и реализую performUpdate() вместо Update(). Я не реализовал параллельную версию для редакторов, но я предполагаю, что мне придется делать то же самое.
Мне не нравится эта стратегия, потому что мне нужно будет передать ее в любой скрипт, который мы выберем из сообщества (и мне нужно будет обеспечить его исполнение в команде). Сценарии редактора не имеют ни одной точки входа, сравнимой с MonoBehavior, поэтому я предполагаю, что мне придется внедрять безопасные версии мастеров, редакторов и т.д.
Я видел предложения об улавливании сообщений журнала (в отличие от исключений) с помощью Application.RegisterLogCallback, но это делает меня неудобным, потому что я 'd нужно проанализировать строку журнала отладки, а не иметь доступ к фактическим исключениям и stacktraces.
Итак... что правильно делать?