Unity包管理和调试

栏目: ASP.NET · 发布时间: 5年前

内容简介:前面讲了怎么打造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上:

下载之后导入插件,然后就可以正常使用了(某些版本可能会有点bug,这东西暂时还不太稳定,主要是依赖这种东西太蛋疼了,你根本不会知道哪些包会和Unity冲突)

Unity包管理和调试

先随便导入一个包吧,以后会用到这个包

这里有个坑注意一下,有些依赖导入Unity之后会报错,这个时候需要手动把报错的包卸载掉。

调试

Unity如果出线错误,或者是没有出线自己预想的结果,这个时候应该怎么办呢?应该自己想办法查找问题所在,而不应该第一时间就跑去问某某某,自己是哪里出了问题。

今天就大致讲一下怎么自己排查问题出在哪里。

Debug.Log()

这是最常用的一种方法,我们用 Debug.Log 把我们想要检查的对象的某个属性输出在日志里,然后去看和我们预想的是不是一样的。

比如我创建了一个简单的Demo(可以在文章结尾下载到)

预期是这样的

Unity包管理和调试

但是实际上却是这样的

Unity包管理和调试

为什么会这样呢?肯定是中间哪里弄错了,先来看一下代码

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包管理和调试

我们截取了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

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并播放

Unity包管理和调试

因为需要打断点的位置需要在 Update 方法里调用,所以如果一开始直接就打断点的话,这个东西根本没有办法调试,我们需要先让程序运行起来,中途再打断点。

Unity包管理和调试

通过打断点的方法,我们同样可以找到问题所在。

除了上面说的,先运行再打断点,还可以用加判断条件的方法调试被 Update 调用的方法。

Unity包管理和调试

比较两种方法

使用 Debug.Log() 和打断点两种方法,具体哪一种比较好用呢?从理论上来讲,打断点好用,而且功能强大,越是复杂的问题,使用起来相对 Debug.Log() 越简单,但是在某些问题上,Debug.Log() 却又非常方便,两种调试方法结合起来使用,可以让你迅速找到问题所在,遇到小问题,再也不用去某某群问别人“为什么我照着教程做,但是XX结果和教程里不一样呢?”

Demo下载地址: https://dl.sm9.top/blog/unity/调试demo/

请作者吃辣条

Unity包管理和调试 支付宝

Unity包管理和调试 微信


以上所述就是小编给大家介绍的《Unity包管理和调试》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法霸权

算法霸权

[美] 凯西·奥尼尔 / 马青玲 / 中信出版集团 / 2018-9-1 / 69.00元

数据科学家凯西•奥尼尔认为,我们应该警惕不断渗透和深入我们生活的数学模型——它们的存在,很有可能威胁到我们的社会结构。 我们生活在一个依赖“算法”的时代,它对我们生活的影响越来越大,我们去哪里上学,我是不是应该贷款买车,我们应该花多少钱来买健康保险,这些都不是由人来决定的,而是由大数据模型来决定的。从理论上来说,这一模型应该让社会更加公平,每一个人的衡量标准都是一样的,偏见是不存在的。 ......一起来看看 《算法霸权》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具