【Unity】实用开发效率优化指南!(一)(个人翻译)

以下内容笔者个人翻译自:http://www.theknightsofunity.com/

在Unity中那些你可以做的更好的事情!

你有多少次因为那些重复的工作内容而感到无聊和厌倦?也许数不胜数…但是,马上你不必再害怕了!

比尔盖茨曾经说过:“我选择懒惰的人去做困难的工作,因为懒惰的人会找到一个轻松的方法。”

你可能会问为什么我把这句话放在这里?因为接下来我将会教你如何偷懒…😉

让我们开始吧

我们列出这个清单的主要原因是因为我们(作为人类)是被设计为懒惰的,我们不喜欢在日常任务中做一些重复的工作。因此,我们想出了一些工具和技巧能让我们的生活更加轻松,我们也希望能让你也更加轻松!


以下是你可以在Unity中做的更棒的10件事情:

改变你play模式下编辑器的颜色!

某些时候为了达到一个完美的效果,你可能已经调整过很多次你的游戏了。可此时你突然意识到是在Play模式中调整的,这也就意味着这些修改内容在退出Play模式后就会消失。不得不又重新回忆做了哪些修改并再次调整。当然了,Unity本来就是如此设计的,只不过你经常会忘记这一点。很可能不止一次对吗?😉
【这种情况确实常有发生,笔者也偶尔会忘记导致又不得不重新修改一次】

所以,提醒你正在Play模式下的最简单的解决方案就是改变Play模式下编辑器的颜色!只需要点开Unity > Preferences > Colors,接着修改Playmode tint为一些更为生动的颜色。

就像这样:
在这里插入图片描述

让代码自动补全

【这一部分笔者没有进行翻译了,因为只是介绍了一款IDE(JetBrains ReSharper),实际上IDE的选择还是遵循每个人的使用习惯就好。而且Visual Studio 2017或2019都已经完善的十分强大了,完全可以与其他IDE一争高下,有兴趣的朋友们可以自行去了解以下,如果是新朋友还是更推荐保持使用Visual Studio即可。】

优化你的生成管线(build pipeline)

当你正在开发一款app或者游戏的时候,很有可能每天会build无数次。每一次build都会花费几分钟甚至一小时。它也会阻碍你的工作直到build完成,这是非常糟糕的。

让我们来数一数你因为这些流程而浪费了多少时间。假设你有一个中等规模的项目,build到安卓设备上需要20分钟,到iOS设备上需要1个小时。你每天至少build一次。现在让我们把一个月(20工作日)里,打包的时间加起来:安卓 - 至少6小时40分钟。IOS - 至少40小时。这比1959年第一艘宇宙飞船(月球1号)飞越月球所用的时间还要长!它只花了36个小时!那么如何节省你的时间呢?使用一些外部工具帮助你进行build!

长时间以来,最流行的工具叫做Jenkins,它可以为你提供非常大的便利。此外,它为你提供了几乎无限制的可能性去配置你的生成管道,以满足你不同的需求,例如:

  1. 查看仓库中最新的提交内容。
  2. 分析代码。
  3. 生成打包。
  4. 生成完成时,将文件发送到一个FTP服务器。
  5. 发送包含生成报告和生成文件链接的邮件。

当然它还有许多的选择,如果有需要,可以再进行添加。对了,我几乎忘记了!它是免费的!所以你只需要去到它们的页面中下载并安装到你的机器上即可。 😉

更多关于Jenkins: https://jenkins.io

另外一个工具由Unity自己提供,叫做Unity Cloud Builds。当然它保证了与编辑器更好的集成,在你开始使用前你基本上可以配置任何内容。和Jenkins一样,它也是免费的,不过如果你订阅了付费版本的Unity,你的builds将会有更高的优先级和更快的处理速度。另外,每当build完成的时候,Unity会生成一个允许你下载或分析给好友的链接。

更多关于Unity Cloud Builds:https://unity3d.com/services/cloud-build

那么上述这两种工具又有什么区别呢?Jenkins是一个开源且拥有一个庞大的插件库。你可以将例如Slack这样的三方API与其集成。Jenkins还允许你以任何你喜欢的方式去配置它,允许你设置属于自己的构建管道。相比之下,Unity Cloud只专注于Unity相关内容,你不能为它添加任何东西。当然,你仍可以配置Slack从云端获取通知,也可以Unity提供的Webhooks,但仅此而已。不过它的优点在于简单直接,易于使用。

你应该选择哪一个呢?假如你希望简单一点,就用Unity Cloud进行生成构建。假如你希望有一些更高级,更多的配置选项,选择Jenkins。

以更方便的方式储存你的数据

许多人将数据放到场景的对象中,或者硬编码到其他地方。使用这些方式,通常会很难通找到哪些为了在开发后期实现预期结果而需要做出改变的地方。

在此,提供两种更合适的存储数据方式:

  1. 文本资源,它可以是JSON,Excel文件或者其他文本格式。但它的问题在于,你只能放入文本内容,并且需要一个解析器来读取这个文件再获取数据。
  2. 另一个更方便的方法是创建ScriptableObject。你可以放入任何你喜欢的内容,比如文本、数字、材质、模型等等。最重要的是,你可以像使用项目中的其他资源一样使用它,且读取数据就像获取变量一样简单。

举个例子:

using UnityEngine;

[CreateAssetMenu(fileName = "NewWeapon", menuName = "Weapon")]
public class WeaponData : ScriptableObject
{
   public string displayName;
   public float damage;
   public float reloadTime;
}

使用这个代码你可以很轻松的创建许多你需要的武器数据对象😉

在这里插入图片描述

自动引用

创建UI不是一件最愉快的事情,主要是因为你有非常多的脚本需要添加引用,你不得不手动去分配它们。让这些引用自己去找到自己不是更好吗?

当然了!以下就有一个案例是这样做的:

using System.Linq;
using UnityEngine;

public class AutoReferencer<T> : MonoBehaviour where T : AutoReferencer<T> {

   #if UNITY_EDITOR
   // This method is called once when we add component do game object
   protected new virtual void Reset()
   {
       // Magic of reflection
       // For each field in your class/component we are looking only for those that are empty/null
       foreach (var field in typeof(T).GetFields().Where(field => field.GetValue(this) == null))
       {
           // Now we are looking for object (self or child) that have same name as a field
           Transform obj;
           if (transform.name == field.Name)
           {
               obj = transform;
           }
           else
           {
               obj = transform.Find(field.Name); // Or you need to implement recursion to looking into deeper childs
           }

           // If we find object that have same name as field we are trying to get component that will be in type of a field and assign it
           if (obj!=null)
           {
               field.SetValue(this, obj.GetComponent(field.FieldType));
           }
       }
   }
   #endif
}
以下是实现了该效果的示例类:
using UnityEngine;
using UnityEngine.UI;

public class DialogWindow : AutoReferencer<DialogWindow> {
   public Text DialogLabel;
   public Button ConfirmButton;
}

如此一来,它在Unity中看起来就是这样:

在这里插入图片描述

在这里插入图片描述
这些引用被自动添加了!😉

总结

至此,希望上面的5个小技巧能帮助你在Unity开发中移除那些繁琐的部分,提供你的生产力。下一部分添加更多类似的技巧,所请继续关注!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值