IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> unity一种日志过滤的思路 -> 正文阅读

[游戏开发]unity一种日志过滤的思路

unity打印日志的函数Debug.Log

但是这样会有一个问题,某些c#打印过于频繁 ,我作为一个开发者不关心他的模块日志。但是我没办法去给他把日志删除了,这样没有道德。于是想着写这样个工具,它不太完美 ,它只能指定我们需要那些cs文件的日志 整体它长这样

比如我现在调试角色的跳跃,角色的跳跃是个很复杂的过程,有起跳阶段,上升阶段1 2 3 ,最高阶段 ,下落阶段123 落体阶段等等等等 这里面相关的参数很多,需要很多判定,需要看日志

如下图就是看移动组件的日志 。上面filter是一个list 我们可以加内容进去 加了之后需要显示的日志模块就会出现这个模块,然后选中它就是看它所属的一些cs日志了。

LogHelper.cs代码如下

using UnityEngine;
using System.Collections.Generic;
#if UNITY_EDITOR
using UnityEditor;
#endif
public interface ILog
{
? ? public void Log(string str);
? ??
}


[System.Serializable]
public class LogCS
{

? ? [SerializeField] public int index;

? ? [SerializeField] public List<string> csNameList = new List<string>();
}

public class LogHelper : MonoBehaviour
{
? ? public static LogHelper Instance;
? ? private void Awake()
? ? {
? ? ? ? GameObject.DontDestroyOnLoad(this.gameObject);
? ? }
? ? void Start()
? ? {
? ? ? ? Instance = this;

? ? }
? ? public void Init()
? ? {
? ? ? ? runtimeMap.Clear();
? ? ? ?
? ? ? ? for (int i = 0; i < map.Count; i++)
? ? ? ? {
? ? ? ? ? ? if (!runtimeMap.ContainsKey(map[i].index))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? runtimeMap.Add(map[i].index, new List<string>());
? ? ? ? ? ? }
? ? ? ? ? ? runtimeMap[map[i].index] = map[i].csNameList;
? ? ? ? ? ??
? ? ? ? }
? ? }

? ? [Label("过滤标签集合")] public string[] filter = new string[] { };
? ? [HideInInspector]
? ? public int currentIndex = 0;
? ? [HideInInspector]
? ? public List<string> filterCs = new List<string>();
? ? [HideInInspector]
? ? [SerializeField]
? ? public List<LogCS> map = new List<LogCS>();
? ? [HideInInspector]
? ? public Dictionary<int, List<string>> runtimeMap = new Dictionary<int, List<string>>();
}

#if UNITY_EDITOR
[CustomEditor(typeof(LogHelper))]
public class LogHelperEditor : Editor
{
? ??
? ? private int lastIndex = 0;

? ? public LogHelper self
? ? {
? ? ? ? get
? ? ? ? {
? ? ? ? ? ? return target as LogHelper;
? ? ? ? }
? ? }
? ? SerializedProperty filterCs;

? ? public void OnEnable()
? ? {
? ? ? ? filterCs = serializedObject.FindProperty("filterCs");

? ? }
? ? public override void OnInspectorGUI()
? ? {
? ? ? ? base.OnInspectorGUI();
? ? ? ? serializedObject.Update();
? ? ? ? EditorGUI.BeginChangeCheck();
? ? ? ? lastIndex = self.currentIndex;
? ? ? ? self.currentIndex = EditorGUILayout.Popup("需要显示的日志模块", self.currentIndex, self.filter);
? ? ? ? if (EditorGUI.EndChangeCheck())
? ? ? ? {
? ? ? ? ? ? Save(lastIndex);
? ? ? ? ??
? ? ? ? ? ? self.filterCs.Clear();
? ? ? ? ? ? Debug.Log((self.currentIndex < self.map.Count).ToString());
? ? ? ? ? ? if (self.currentIndex < self.map.Count)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Debug.Log(self.map[self.currentIndex].index);
? ? ? ? ? ? ? ? for (int i = 0; i < self.map[self.currentIndex].csNameList.Count; i++)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? self.filterCs.Add(self.map[self.currentIndex].csNameList[i]);
? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? }

? ? ? ? ? ? }
? ? ? ? ? ?

? ? ? ? }
? ? ? ? EditorGUI.BeginChangeCheck();
? ? ? ? EditorGUILayout.PropertyField(filterCs, new GUIContent("过滤脚本名(不带后缀)"));
? ? ? ? if (EditorGUI.EndChangeCheck())
? ? ? ? {
? ? ? ? ? ?
? ? ? ? ? ? Save(self.currentIndex);
? ? ? ? }
? ? ? ? serializedObject.ApplyModifiedProperties();
? ? ? ??

? ? }
? ? void Save(int index)
? ? {
? ? ? ? if (self.map.Count > (index))
? ? ? ? {
? ? ? ? ? ? Debug.Log("self.map.Count > (index) " + self.map.Count + "--" + index);
? ? ? ? ? ? self.map[index].csNameList.Clear();
? ? ? ? ? ? for (int i = 0; i < self.filterCs.Count; i++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? self.map[index].csNameList.Add(self.filterCs[i]);
? ? ? ? ? ? ? ? Debug.Log("self.map add" + index + " Count == " + self.map[index].csNameList.Count);
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? Debug.Log("self.filterCs.Count == ?" + self.filterCs.Count);
? ? ? ? ? ? var ls = new LogCS();
? ? ? ? ? ? self.map.Add(ls);
? ? ? ? ? ? ls.index = index;
? ? ? ? ? ? for (int i = 0; i < self.filterCs.Count; i++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? ls.csNameList.Add(self.filterCs[i]);
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? self.Init();
? ? }
}

#endif

然后具体日志答应在一个静态类中 我叫DLog方法 。建议就是在所有的cs文件中 实现ILog接口 这个接口就一个方法 Log 然后实现类的Log方法?

?

?public static class CommonUtils
?{

????????

public static void DLog(this ILog log, object str)
? ? ? ? {
? ? ? ? ? ? string fileName = log.GetType().Name;
? ? ? ? ? ? var ins = LogHelper.Instance;
? ? ? ? ? ? bool showLog = false;
? ? ? ? ? ? var index = LogHelper.Instance.currentIndex;
? ? ? ? ? ? if (LogHelper.Instance.runtimeMap.ContainsKey(index))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? var list = LogHelper.Instance.runtimeMap[index];
? ? ? ? ? ? ? ? for (int i = 0; i < list.Count; i++)
? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? if (fileName.ToLowerInvariant() == list[i].ToLowerInvariant())
? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? showLog = true;
? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? showLog = true;
? ? ? ? ? ? }

? ? ? ? ? ? if (showLog)
? ? ? ? ? ? ? ? Debug.Log(str);
? ? ? ? }

}

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:54:10  更:2022-03-24 00:56:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:49:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码