UniTaskでエラーが起きた時の処理をいい感じにする

UniTaskでエラーが起きた時の処理をいい感じにする

e.StackTrace でエラーのスタックトレースを取れる

        public static async UniTask RunTaskHandlingErrorAsync(this UniTask task, Action<Exception> onError) {
            try {
                await task;
            } catch(Exception e)
            {
                Debug.LogError($"{e.Message}\n{e.StackTrace}");
                onError(e);
            }
        }

エラー箇所にいい感じに色を付けたり、キャンセルの時は警告扱いにしておく

        public static async UniTask RunTaskHandlingErrorAsync(this UniTask task, Action<Exception> onError) {
            try {
                await task;
            } catch(Exception e)
            {
                LogTaskHandlingError(e);
                onError(e);
            }
        }

        public static void LogTaskHandlingError(Exception e)
        {
            if (e is OperationCanceledException)
                Debug.LogWarning($"{e.Message}\n{e.StackTrace.colorizeStackTrance()}");
            else
                Debug.LogError($"{e.Message}\n{e.StackTrace.colorizeStackTrance()}");
        }

    private static string colorizeStackTrance(this string message)
    {
#if UNITY_EDITOR
        string pattern = @"([\S\/\\]+):(\d+)";

        return Regex.Replace(
            message, pattern, 
            "<a href=\"$1\" line=\"$2\"><color=#76b900>$1:$2</color></a>");
#else
        return message;
#endif
    }