转自: http://blog.sina.com.cn/s/blog_4a2183a601018719.html

程序不会犯错,人却经常犯错。

程序错误(英语:Bug),在程序设计中的術語,是指在软件运行中因为程序本身有错误而造成的功能不正常、死机、数据丢失、非正常中断等现象。
早期的计算机由于体积非常庞大,有些小虫子可能会钻入机器内部,造成计算机工作失灵。史上的第一个隐错是因為一隻飛蛾意外飛入一臺電腦內部而引起的故障(如圖所示),因此用“Bug”(原意为“虫子”)来称隐错。
一些有趣的隐错有时也会成为一种乐趣。在电脑游戏中,假如一些隐错不令遊戲出現大錯誤的話,经常会变成一种玩游戏时的秘技(秘技有時是遊戲設計人故意造成的)。

Bug能解決,稱之Fix。
Bug不能解決,但能避開問題的替代方法,稱之Workaround。
Severity是Bug造成的嚴重性。
Debug指解决Bug的过程(排错)。

——维基百科

用我同事金老师常说的话来说就是有Bug?踹一脚。

最简单的纠错方法  MonoBehaviour.print(object);
官方教程中用来输出hello world就是用的这个函数。简单易用,只要把数输出到控制台就能跟踪到变化,找出错误的步骤。debug信息后面还会跟上出错的脚本和调用过程。

实际上这个函数就是Debug.Log函数。专门用来输出信息的。跟这个函数类似的还有LogWorning和LogError函数,可以用不同的颜色来表明信息的重要程度。比如一个函数的输入值不应该为0,因为它要作为除数。如果你自己用估计不会出错,但是合作开发时这个函数可能会被你的同事或客户调用,那你就应该进行响应的检查并在输入值为0时用LogError提示这个错误,方便他们改正。LogWorning我通常会用在不是错误的输入,但不应该出现这个值的情况,比如计算飞机飞行距离,但是飞机的输入飞行速度是0,这显然是忘记赋值了。有时候我更新了一个函数的签名,也会在旧函数上加上worning让别人记得调用新函数。大部分人都懒得看更新日志:p。Log系列还有一个用法 Debug.Log(object message,UnityEngine.Object context), 后面那个 context可以填上出错的物体, 如果有多个物体有这个脚本而其中一个出错了,可以用这个在hierarchy面板里高亮出来。

还有一个函数我也很常用,Debug.DrawLine(Vector3 from, Vector3 to, Color color=Color.white)。这个函数可以在scenes场景里画出一条两点之间指定颜色的线,最早我用来学习和研究Vector3和Quaternion类里面函数的作用,后来主要用来验证一些距离或旋转的运行结果,以及Raycast函数的返回值。

Debug.Break()也很有用,当某些错误发生时可以用这个函数从运行状态下暂停,方便在场景中研究错误的原因, 比如因为物理碰撞计算造成的穿插等,很可能只有一帧会出现,用这个暂停就能观察到。其他Debug.DrawRay就很少用了。

用过VS的都喜欢里面的设断点功能,可以跟踪数值的变化。在unity项目中,需要用软件自带的MonoDevelop才可以实现这个功能。不过我一次都没有用过,因为这个功能使用过程太繁琐了,需要额外编译。(顺便说下我还是在用那个笔记本差不多的UniSciTE)跟我接下来说的技巧比起来,简直就是渣。

没错,就是GUILayout。Unity的GUI类作为界面工具来讲,简直烂暴了。不过作为Debug工具却相当好用(囧)。只要把相关的便利写成全局的然后在OnGUI里用GUILayout。Label打印就好了,自动排列,一次可以显示好多。 可以通过GUILayout.BeginArea(Rect) GUILayout.Space() GUILayout.BeginVirtical()等排版比对。步进的话,暂停然后用unity的下一帧功能就好了......灵活高效,vs mono 什么的统统可以扔掉了。

最后,就是踹一脚这个必杀技了^_^。
Debug终极必杀技之 try...catch。 以前不知道,直到有同事调用我的函数却没有try才发现原来直接throw的异常unity会自动用Debug.LogError进行处理。so, 从此以后我的代码几乎到处都是throw,自带跳出和打印,方便快捷不用管函数返回类型什么的,真是居家旅行,杀人...错了 debug必备的神器。

Unity3d 学习与应用之 DEBUG相关推荐

  1. Unity3D 学习笔记4 —— UGUI+uLua游戏框架

    Unity3D 学习笔记4 -- UGUI+uLua游戏框架 使用到的资料下载地址以及基础知识 框架讲解 拓展热更过程 在这里我们使用的是uLua/cstolua技术空间所以提供的UGUI+uLua的 ...

  2. Unity3D学习笔记8——GPU实例化(3)

    文章目录 1. 概述 2. 详论 2.1. 自动实例化 2.2. MaterialPropertyBlock 3. 参考 1. 概述 在前两篇文章<Unity3D学习笔记6--GPU实例化(1) ...

  3. 【Unity3d学习】使用物理引擎——打飞碟游戏的物理引擎改进与射箭游戏设计

    文章目录 写在前面 HitUFO的物理引擎改进版本 物理引擎的改进版本思路与实现 PhysicsAction PhysicsManager 新接口类IActionManager 动作管理器基类的变化 ...

  4. unity3d学习(三)制作敌人简单AI和发射火球

    制作敌人简单AI和发射火球 写在前面: - 学习课本:Unity5实战 使用c#和unity开发多平台游戏-作者:Joseph Hocking - 内容:第三章 -unity3d学习(一)制作第一人称 ...

  5. Unity3D学习之路——AI小坦克

    Unity3D学习之路--AI小坦克 作业要求: 坦克对战游戏 AI 设计 从商店下载游戏:"Kawaii" Tank 或 其他坦克模型,构建 AI 对战坦克.具体要求 使用&qu ...

  6. [Unity3D学习]Unity代码热更新 源码下载

    转载自:http://blog.gamerisker.com/archives/608.html 之前的一篇文章<[Unity3D学习]Unity代码热更新解决方案测试结果总结>只是说了一 ...

  7. Unity3D 学习笔记3——了解U3D引擎的操作面板和各种工具

    Unity3D 学习笔记3--了解U3D引擎的操作面板和各种工具 在完成了Unity的安装破解之后,我们接下来要做的当前是启动这个引擎,然后学会如何去使用它为我们提供的各种工具,这也是上手任何一个软件 ...

  8. Unity3D学习笔记6——GPU实例化(1)

    文章目录 1. 概述 2. 详论 3. 参考 1. 概述 在之前的文章中说到,一种材质对应一次绘制调用的指令.即使是这种情况,两个三维物体使用同一种材质,但它们使用的材质参数不一样,那么最终仍然会造成 ...

  9. Unity3D学习之添加耀斑,添加天空,添加画中画。

    Unity3D学习 首先我们在Create创建一个Terrian(地形),然后单击菜单栏中的Assets(资源)单击Import Package在选择Terrian Creater导入点击import ...

最新文章

  1. php中使用mysql_fetch_array输出数组至页面中展示
  2. 51单片机定时器实现LED闪烁
  3. java怎么制作放置游戏_从零开始实现放置游戏(八)——实现后台管理系统(6)代码重构...
  4. Rancher第一款Kubernetes操作系统推出
  5. Machine Learning on Spark—— 统计基础(一)
  6. flutter ios打包_Flutter通过BasicMessageChannel与Android iOS 的双向通信
  7. 上课学计算机的周记,计算机实习周记20篇
  8. python模拟太阳系_模拟太阳系8大行星运行图:matplotlib实现
  9. 旁观者-郑昀博客java调优
  10. 微信小程序开发实战(网络请求设置)
  11. Algorithm:C++语言实现之Hash哈希算法相关(dbj2、sdbm、MurmurHash)
  12. qdbus模块_Qt6各大模块变更概览:旨在成为未来主要开发平台
  13. php画梯形,科学网—梯形法误差 - 张江敏的博文
  14. 递推算法5——逆推法之猴子摘桃问题
  15. luoguP5108 仰望半月的夜空 [官方?]题解 后缀数组 / 后缀树 / 后缀自动机 + 线段树 / st表 + 二分...
  16. ECharts实现数据可视化超详细基础入门教程
  17. 【AnySDK】目前对外开放的渠道列表
  18. video-editing
  19. Fastdata极数:2020中国K12在线教育行业报告
  20. 二次开发QTYX量化系统—“飞龙在天”选股报告(20230201)

热门文章

  1. MATLAB图像处理学习——高通滤波(频域滤波(二))
  2. 空气净化器十大名牌,负离子空气净化器十大品牌推荐
  3. resolution will not be reattempted until the update interval of vas has elap
  4. python入门教程下载-Python 如何入门?附Python教程下载
  5. oracle listagg支持,PostgreSQL行列转换(兼容oracle listagg)
  6. 淮安掼蛋程序源码之短信验证源码
  7. Linux查看内存和CPU占用排名前10相关
  8. python endif_在Django模板中的 if else endif
  9. Jack Dangermond先生的一段话
  10. 开发工具:putty使用教程,超时连接