Unity3D在Preview中打印日志的方法

Preview窗口除了可以预览模型之外,我们还可以做别的操作。

今天我们来写个小工具在Preview窗口中显示调试信息。

可以看下面的图,同样是打印 health 和 power 的日志,在 Preview 中显示比在 Console 中显示舒服多了。

左边是Console中显示,右边是Preview窗口中显示。

创建Editor目录,然后把下面的脚本放进去

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(Object), true)]
public class PreviewGUIEditor : Editor {
 /** Update every 15th frame. */
 private const int updateOnFrame = 15;

 private GUIStyle _previewLabelStyle;

 private GUIStyle previewLabelStyle {
 get {
  if (_previewLabelStyle == null) {
  _previewLabelStyle = new GUIStyle("PreOverlayLabel") {
   richText = false,
   alignment = TextAnchor.UpperLeft,
   fontStyle = FontStyle.Normal
  };
  // Try to get a fixed-width font on macOS.
  var font = Font.CreateDynamicFontFromOSFont("Monaco", 12);
  // Failing that, try to get a fixed-width font on Windows.
  if (font == null)
   font = Font.CreateDynamicFontFromOSFont("Lucida Console", 12);
  // XXX What fixed-width font should I request if we're on Linux?
  if (font != null)
   _previewLabelStyle.font = font;
  // Debug.Log("Fonts: \n" + string.Join("\n", Font.GetOSInstalledFontNames()));
  }
  return _previewLabelStyle;
 }
 }

 public override bool HasPreviewGUI() {
 return Application.isPlaying;
 }

 public override bool RequiresConstantRepaint() {
 // Only repaint on the nth frame.
 return Application.isPlaying && Time.frameCount % updateOnFrame == 0;
 }

 public override void OnPreviewGUI(Rect rect, GUIStyle background) {

 string str = target.ToString();

 GUI.Label(rect, str, previewLabelStyle);
 }
}

在我们需要打印日志的类里面 重载ToString()函数,返回需要在preview中输出的内容。

下面是上面截图的示例,一个Player类,在ToString()函数中返回了 health 和 power的输出内容。

using UnityEngine;

public class Player : MonoBehaviour
{
 public int health = 10;

 public int power = 10;
 // Use this for initialization
 void Start () {

 }

 // Update is called once per frame
 void Update ()
 {
 health += 1;
 power += 2;

 Debug.LogError("health = "+ health);
 Debug.LogError("power = "+ power);

 }

 public override string ToString()
 {
 return "health = " + health+"\n"+
   "power = " + power;
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Unity实现简易日志输出功能

    在使用Unity中的Debug.Log()进行日志输出时很不方便,在打包出来的可执行文件中没有办法看到输出,所有就想自己实现一个简易的日志输出功能,可以输出到日志文件,因为能力实在是不够,所以有错误和不合理的地方,还请各位老师指点一下,谢谢啦 1.日志记录器接口 public interface ILogger { void Log(string condition, string stackTrace, UnityEngine.LogType type); } 2.日志文件记录器 using

  • Unity3D在Preview中打印日志的方法

    Preview窗口除了可以预览模型之外,我们还可以做别的操作. 今天我们来写个小工具在Preview窗口中显示调试信息. 可以看下面的图,同样是打印 health 和 power 的日志,在 Preview 中显示比在 Console 中显示舒服多了. 左边是Console中显示,右边是Preview窗口中显示. 创建Editor目录,然后把下面的脚本放进去 using UnityEngine; using UnityEditor; [CustomEditor(typeof(Object), t

  • C#打印日志的方法总结

    在我们对程序进行操作过程中,一般都需要有一个操作流程的记录显示.用C#进行编程时可以很容易实现这个功能.本经验提供案例仅供参考 下面小编就来介绍一下如何使用textbox控件实现日志功能. 打开Visual Studio 2010,建立一个新的C#程序.在工具箱中双击[textbox]控件. 在界面上放置一个[textbox]控件作为日志显示,同时添加一个按钮控件. 添加日志显示的方法[displaylog],在textbox控件中输入信息. 在load方法中调用[displaylog]方法,输

  • 按日期打印Python的Tornado框架中的日志的方法

    网站流量上来后,日志按天甚至小时存储更方便查看和管理,而Python的logging模块也提供了TimedRotatingFileHandler来支持以不同的时间维度归档日志. 然而根据Logging HOWTO的官方指南设置后,却发现新的日志只剩下root的,Tornado内部的logger全部没有生效. 参考stackoverflow上的一个回答,我发现下面的配置能让Tornado内部的logger也用上TimedRotatingFileHandler: # logging.yaml ver

  • Django 使用logging打印日志的实例

    Django使用python自带的logging 作为日志打印工具.简单介绍下logging. logging 是线程安全的,其主要由4部分组成: Logger 用户使用的直接接口,将日志传递给Handler Handler 控制日志输出到哪里,console,file- 一个logger可以有多个Handler Filter 控制哪些日志可以从logger流向Handler Formatter 控制日志的格式 用户使用logging.getLogger([name])获取logger实例. 如

  • SpringBoot中使用AOP打印接口日志的方法

    前言 AOP 是 Aspect Oriented Program (面向切面)的编程的缩写.他是和面向对象编程相对的一个概念.在面向对象的编程中,我们倾向于采用封装.继承.多态等概念,将一个个的功能在对象中来实现.但是,我们在实际情况中也发现,会有另外一种需求就是一类功能在很多对象的很多方法中都有需要.例如有一些对数据库访问的方法有事务管理的需求,有很多方法中要求打印日志.按照面向对象的方式,那么这些相同的功能要在很多地方来实现或者在很多地方来调用.这就非常繁琐并且和这些和业务不相关的需求耦合太

  • SSM项目中配置LOG4J日志的方法

    本文介绍了SSM项目中配置LOG4J日志的方法,分享给大家,具体如下: 在pom文件中添加依赖 . <!--Log4j2配置--> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.8.1</version> </dependency> <

  • Android中如何安全地打印日志详解

    前言 在Android开发过程中,不管是写Demo还是实战项目中,都会打印一些日志用于记录数据,调试来着,Android中的日志工具类是Log,这个类提供了一些方法来打印日志.五个级别,v.d.i.w.e,各有不同的重载. 当谈到如何打印日志?很多人会想这不是很简单,直接使用android.util.Log这个类不就行了?然而,日志属于非常敏感的信息:逆向工程师在逆向你的程序的时候,本来需要捕捉你程序的各种输出,然后进行推测,顺藤摸瓜然后得到需要的信息:一旦你的日志泄漏,无异于门户洞开,破解你的

  • Python实现从log日志中提取ip的方法【正则提取】

    本文实例讲述了Python实现从log日志中提取ip的方法.分享给大家供大家参考,具体如下: log日志内容如下(myjob.log): 124.90.53.68 - - [05/Feb/2018 11:37:07] "GET /favicon.ico HTTP/1.1" 404 - 61.148.245.145 - - [05/Feb/2018 12:37:44] "GET / HTTP/1.1" 200 - 61.148.245.145 - - [05/Feb/

  • Python 根据日志级别打印不同颜色的日志的方法示例

    本文介绍了Python 根据日志级别打印不同颜色的日志的方法示例,分享给大家,具体如下: # -*-coding:UTF-8-*- import logging import os import time class logger(object): """ 终端打印不同颜色的日志,在pycharm中如果强行规定了日志的颜色, 这个方法不会起作用, 但是 对于终端,这个方法是可以打印不同颜色的日志的. """ #在这里定义StreamHandler

  • Spring MVC打印@RequestBody、@Response日志的方法

    问题描述: 使用JSON接收前端参数时, SpringMVC默认输出日志如下: o.s.web.servlet.DispatcherServlet : POST "/example_project/app/login", parameters={} parameters={}无法打印出JSON消息内容. 如果自己实现参数打印, 则需要从reqeust.getInputStream中获取JSON内容, 但是由于流只能读取一次, 所以会导致后续SpringMVC解析参数异常. 网上找到一种

随机推荐