Unity包管理和调试

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

内容简介:前面讲了怎么打造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包管理和调试》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

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

并发的艺术

并发的艺术

Clay Breshears / 聂雪军 / 机械工业出版社 / 2010年9月 / 49.00元

如果你希望通过并发编程来充分发挥多核处理器的强大功能,那么本书将为你提供所需的理论知识和实际经验。《并发的艺术》是为数不多的几本介绍如何在多核处理器的共享内存模型中实现算法的书籍之一,它并非仅仅介绍一些理论模型或者分布式内存架构。本书详细分析了各种示例程序,这些内容非常有助于你将串行代码转换为并行代码,此外还介绍了如何避免一些常见的错误。 本书的作者是Intel公司的一位资深工程师,他从事并......一起来看看 《并发的艺术》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器