内容简介:前面讲了怎么打造Unity最强IDE,那么今天就来讲一下怎么用前面搭建好的环境快速开发。对于 .net 项目而言,NuGet确实是最好的包管理器,Unity项目也不不例外。那么今天就来讲一下在Unity项目里管理NuGet包。
前面讲了怎么打造Unity最强IDE,那么今天就来讲一下怎么用前面搭建好的环境快速开发。
Nuget包管理
NuGet is the package manager for .NET. The NuGet client tools provide the ability to produce and consume packages. The NuGet Gallery is the central package repository used by all package authors and consumers.
对于 .net 项目而言,NuGet确实是最好的包管理器,Unity项目也不不例外。
那么今天就来讲一下在Unity项目里管理NuGet包。
cli
使用命令行工具,理论上是可行的,但是未免也太蛋疼了吧,还是换个更好一点的 工具 试试吧;
NuGetForUnity
NuGetForUnity is a NuGet client built from scratch to run inside the Unity Editor. NuGet is a package management system which makes it easy to create packages that are distributed on a server and consumed by users. NuGet supports sematic versioning for packages as well as dependencies on other packages.
从介绍上来看,这是一款专为Unity打造的NuGet包管理工具,并且是开源工具,发布在GitHub上:
- 开源地址: https://github.com/GlitchEnzo/NuGetForUnity
- 插件下载地址: https://github.com/GlitchEnzo/NuGetForUnity/releases
下载之后导入插件,然后就可以正常使用了(某些版本可能会有点bug,这东西暂时还不太稳定,主要是依赖这种东西太蛋疼了,你根本不会知道哪些包会和Unity冲突)
先随便导入一个包吧,以后会用到这个包
这里有个坑注意一下,有些依赖导入Unity之后会报错,这个时候需要手动把报错的包卸载掉。
调试
Unity如果出线错误,或者是没有出线自己预想的结果,这个时候应该怎么办呢?应该自己想办法查找问题所在,而不应该第一时间就跑去问某某某,自己是哪里出了问题。
今天就大致讲一下怎么自己排查问题出在哪里。
Debug.Log()
这是最常用的一种方法,我们用 Debug.Log
把我们想要检查的对象的某个属性输出在日志里,然后去看和我们预想的是不是一样的。
比如我创建了一个简单的Demo(可以在文章结尾下载到)
预期是这样的
但是实际上却是这样的
为什么会这样呢?肯定是中间哪里弄错了,先来看一下代码
using UnityEngine; using UnityEngine.UI; public class DebugLog : MonoBehaviour { private Slider _slider0; private Slider _slider1; private void Start() { _slider0 = GameObject.Find("Slider0").GetComponent<Slider>(); _slider1 = GameObject.Find("Slider1").GetComponent<Slider>(); } private void Update() { SyncSlider(); } private void SyncSlider() { var value0 = _slider0.value * 0.5f; _slider1.value = value0; } }
一眼望过去,左看又看,横看竖看也看不出来问题啊
(这要是还看不出来就是真眼瞎了)
既然肉眼看不出来,那咱们就先简单分析一下这简简单单的两行代码,原理也很简单,先获取到 Slider0
的值,赋值给 value0
,然后再把 value0
的值赋给 Slider1
。
咱们打一下Log看看 value0
的值是不是与 Slider0
的值一致
private void SyncSlider() { var value0 = _slider0.value * 0.5f; Debug.Log($"Slider0Value:{_slider0.value},value0:{value0}"); _slider1.value = value0; }
我们截取了Unity中控制台窗口的一部分,从图中我们可以看出, value0
的值总是 Slider0
的值的一半,再返回去检查代码,发现原来是手抖加了一个 * 0.5
啊,改过来就可以符合我们的预期了。
private void SyncSlider() { - var value0 = _slider0.value * 0.5f; + var value0 = _slider0.value; _slider1.value = value0; }
打断点
说实话,这个例子举得不太恰当,因为在被Update函数调用的函数里打断点调试,是一件很蛋疼的事,需要一些技巧才能熟练使用。但是今天仅仅是演示怎么找到问题所在,所以看我怎么操作就可以了。
首先是需要安装 Visual Studio Tools for Unity
同样用刚才的项目做演示,打开刚才的项目,简单将 Debug.Log()
注释掉
using UnityEngine; using UnityEngine.UI; public class DebugLog : MonoBehaviour { private Slider _slider0; private Slider _slider1; private void Start() { _slider0 = GameObject.Find("Slider0").GetComponent<Slider>(); _slider1 = GameObject.Find("Slider1").GetComponent<Slider>(); } private void Update() { SyncSlider(); } private void SyncSlider() { var value0 = _slider0.value * 0.5f; //Debug.Log($"Slider0Value:{_slider0.value},value0:{value0}"); _slider1.value = value0; } }
将调试信息改为 附加到Unity并播放
因为需要打断点的位置需要在 Update
方法里调用,所以如果一开始直接就打断点的话,这个东西根本没有办法调试,我们需要先让程序运行起来,中途再打断点。
通过打断点的方法,我们同样可以找到问题所在。
除了上面说的,先运行再打断点,还可以用加判断条件的方法调试被 Update
调用的方法。
比较两种方法
使用 Debug.Log() 和打断点两种方法,具体哪一种比较好用呢?从理论上来讲,打断点好用,而且功能强大,越是复杂的问题,使用起来相对 Debug.Log() 越简单,但是在某些问题上,Debug.Log() 却又非常方便,两种调试方法结合起来使用,可以让你迅速找到问题所在,遇到小问题,再也不用去某某群问别人“为什么我照着教程做,但是XX结果和教程里不一样呢?”
Demo下载地址: https://dl.sm9.top/blog/unity/调试demo/
请作者吃辣条
支付宝
微信
- 本文作者: MonoLogueChi
- 本文链接: https://www.xxwhite.com/2018/unity-vs-debug.html
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
以上所述就是小编给大家介绍的《Unity包管理和调试》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Spring Boot基础教程 ( 三 ) :使用 Cloud Studio 在线编写、调试和管理 Spring Boot 应用
- iOS常用调试方法:断点调试
- 断点调试和日志调试之间的平衡点:函数计算调试之 Python 篇
- .NET高级调试系列-Windbg调试入门篇
- VisualStudio 通过外部调试方法快速调试库代码
- GDB 调试 Mysql 实战(二)GDB 调试打印
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Base64 编码/解码
Base64 编码/解码
HEX HSV 转换工具
HEX HSV 互换工具