82 lines
2.5 KiB
C#
82 lines
2.5 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.SceneManagement;
|
|
using System.Linq;
|
|
using Newtonsoft.Json;
|
|
using UnityEngine.Pool;
|
|
using BITModel;
|
|
namespace BITKit
|
|
{
|
|
public class UnityDiagnostics : MonoBehaviour, IDiagnostics
|
|
{
|
|
[BITCommand]
|
|
public static void SelfDiagnostics()
|
|
{
|
|
singleton.Diagnostics();
|
|
}
|
|
static UnityDiagnostics singleton;
|
|
public Provider output;
|
|
[ContextMenu(nameof(Diagnostics))]
|
|
public void Diagnostics()
|
|
{
|
|
if (output)
|
|
{
|
|
BIT4Log.Log<UnityDiagnostics>("已找到Output");
|
|
}
|
|
else
|
|
{
|
|
BIT4Log.Warnning<UnityDiagnostics>("没有找到Output");
|
|
var components = GetComponents<MonoBehaviour>();
|
|
foreach (var x in components)
|
|
{
|
|
BIT4Log.Log<UnityDiagnostics>($"已找到组件:{x.name}");
|
|
}
|
|
return;
|
|
}
|
|
var dictionary = DictionaryPool<string, object>.Get();
|
|
List<GameObject> gameObjects = new();
|
|
gameObjects.AddRange(gameObject.scene.GetRootGameObjects());
|
|
//gameObjects.Add(BITAppForUnity.GameObject);
|
|
|
|
BIT4Log.Log<UnityDiagnostics>("已完成场景加载");
|
|
var diagnostics = gameObjects
|
|
.SelectMany(x => x ? x.GetComponentsInChildren<IDiagnostics>() : null);
|
|
try
|
|
{
|
|
BIT4Log.Log<UnityDiagnostics>($"正在诊断:");
|
|
foreach (var dx in diagnostics)
|
|
{
|
|
if (dx is not null)
|
|
{
|
|
BIT4Log.Log($"{dx.GetName()}:{dx.GetDiagnostics()}");
|
|
dictionary.Add(dx.GetName(), dx.GetDiagnostics());
|
|
}
|
|
else
|
|
BIT4Log.Log<UnityDiagnostics>($"检测到引用异常");
|
|
}
|
|
var json = JsonConvert.SerializeObject(dictionary, Formatting.Indented);
|
|
output.Set(json);
|
|
}
|
|
catch (System.Exception e)
|
|
{
|
|
BIT4Log.LogException(e);
|
|
}
|
|
BIT4Log.Log<UnityDiagnostics>("已完成诊断");
|
|
}
|
|
|
|
public string GetName()
|
|
{
|
|
return gameObject.name;
|
|
}
|
|
|
|
public object GetDiagnostics()
|
|
{
|
|
return "OK";
|
|
}
|
|
void Start()
|
|
{
|
|
singleton = this;
|
|
}
|
|
}
|
|
} |