利用Unity让工作更有效率的十大办法 VR开发心得

manew_JR 2017-03-23 18:40:46
你是不是曾经很多次因为要重复性的做一件事而感觉无聊或者失望,或许经常回这样…但是你不用再担心了!
 
比尔盖茨曾说过:“我选择做一个高难度工作的懒汉。因为一个懒人会选择用最简单的方式去工作。”
 
同时你可能会问为什么我要举这样一个例子?因为我要给你介绍一种懒人方法。
 
那么开始吧
 
我们想出这个方法的主要原因事实上是希望通过设计让我们变成了“懒汉”,我们不用再每个任务中重复同样的工作。所以,我们想到用工具和诀窍来让我们的生活变得更轻松,我们也同时希望它可以帮助到你!
 
下面是在Unity里面排在前十位最有效的方法:
 
 
第一, 改变你编辑的模型颜色
 
你是否常常在某一个点上反复调整你的游戏设计?又或者你发现你仅仅是按了暂停键然后所有你之前做的工作都没有了?当然这在unity经常发生。但是你一定不会忘记这样的情况,而且它不会只发生一次。
 
其实最简单有效的提醒自己的方法就是在play mode下去改变editor的play mode颜色。它在Unity菜单下的Preferences的colors里,然后在playmode tint color里把它的颜色调一个最亮的颜色就可以了。
 
 
 
第二 让代码自己写
 
有很多工具可以拓展你的IDE,其中还有一些小技巧来辅助你。其中一个拓展工具就是JetBrains Resharper,这个软件十分实用,你在做任何编程的时候都可以用到。
 
 
这个工具会分解你的代码,然后再编写代码。它还可以帮你找出bug。它甚至可以帮你修正你的bug.虽然不一定所有都行得通,但是常规的bug还是没问题的。
 
 
如果你是个程序猿,这个工具一定会帮到你。
 
 
举几个例子
• Converting code to Linq:
 
 
 
• Converting code from Linq:
 
 
 
• Adding missing usings:
 
 
 
• Generating methods:
 
 
 
可以到官网下载
 
 
第三 优化你的创建通道
 
 
当你在生成一个新的app或者游戏时,你可能需要创建很多次builds来测试。每一个build会生成好几分钟,甚至是好几个小时。这其实是在影响你的工作效率。
 
 
所以为了能让这个生成过程节省很多时间,我们会建议你的项目最好是适中大小的文件,那么它一般在环境下会生成20分钟左右,而在ios环境下是一个小时左右。这样的话,你在每天生成一个build时间就可以降低到最低。那么,我们计算下时间,它一个月(大概是20个工作日除掉周六日)会花费掉你的时间是:Android环境下至少6个小时40分钟,ios是至少40小时。那么这样算下来你的时间比造一个第一架登陆月球的航天飞行器(luna1 制造于1959年) 时间还要多!它用了36小时!好吧,那如何来节省这些时间呢?用外部的辅助工具可以帮你来生成build.
 
 
之前曾经一度流行Jenkins这个外部插件。它有很多灵活的功能。同时,它可以给你最基本的无限制的方法来设置你的创建通道,举例:
 
一 新任务中可查看资源库
二 解析代码
三 创建build
四 完成后,可发送build文件到FTP服务器上
五 发送build报告及相关文件链接邮件
 
 
工具栏还有很多其他的选项,而且如果你需要更多功能,你可以自己再加进去。而且它全部是免费的!所以你只需要登陆它的官网下载安装就可以了。
 
 
另外一个工具是unity自带的工具叫Unity Cloud Builds。它的集成稳定行更高一些,在它的编辑栏中你基本上可以设置任何你需要的功能。像jenkins,它同样也是免费的,不过unity订阅你的builds可以更好地优化同时运行速度也会更快。
另外,unity会关联到你的build用来下载你的文件或者分享给其他人。
 
More about Unity Cloud Builds: https://unity3d.com/services/cloud-build
 
 
 
那么这两个软件有什么不同呢?第一个是开源的而且有一个非常大的plugins资源库可以用来安装,例如,你可以把slack整合进3rd party APIs 里,或者用任何方式来配置你的工具栏,并且提供设置你自己build通道的可能。而unity cloud则仅仅可以在unity框架内使用,你也没法加载其他东西在里面。当然,你也可以设置slack中的桌面提醒,来提醒unity cloud或者 webhooks的信息,但是仅此而已。而它的优势则在于直截了当,而且非常容易设置以及操作。
 
 
那么哪一个是你最想要使用的呢?如果你仅仅是需要一些简单的要求,那么直接下载unity cloud builds就可以了,如果你还需要在配置选项中,增加更高级的命令那么就选择jenkins.
 
 
第四,用方便的方式存储你的数据
 
 
很多人会把数据放在scene或者hardcore的对象里。这种方法常常会让你很难发现在生成一个想要得到的结果时,你哪里仍然需要调整。
 
但是现在有两种非常好的方法帮你来存储数据:
1 test asset, 它可以是json, excel 文件或者是任何形式的文字形式。主要问题点是在这样的文件中你只需要输入字体,然后创建一个解析器来帮你阅读这个文件,并且得到你的数据。
2 创建scriptableobject. 这个方法更加有效和方便。你可以把他们放在任何你想要的地方,例如像Text, numbers, textures, material, models等等。 而且最重要的是你可以像其他asset一样用它,并且像得到一个变量一样容易的去读取数据。
 
 
以下是一个关于ScriptableObject代码的案例:
 
 
1
2
3
4
5
6
7
8
using UnityEngine;
 
[CreateAssetMenu(fileName = "NewWeapon", menuName = "Weapon")]
public class WeaponData : ScriptableObject
{
   public string displayName;
   public float damage;
   public float reloadTime;
}
 
通过这些代码你可以像很多 WeaponData 对象一样很容易创建你想要的代码
 
 
 
 
第五 自动关联
 
创建UI通常是最令人烦恼的事,因为大多数情况下你有很多脚本,他们需要更多你自己必须要手动的参考对象。如果所有的这些参考对象文件能自己加载那该有多好。
 
那么下面有一种方法可以做到:
 
 
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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
}
 
 
 
 
 
所有的都可以被自动加载!
 
总结
 
以上五种方法希望可以帮助你从繁碎的生成unity对象的过程中解脱出来,并且提高工作效率。 我会在接下来的一个章节中添加其他的方法,所以尽情关注之后的更新。你可以订阅我们的newsletter.
99VR视界二维码
热门推荐
Hot Recommended
在线客服