做项目的时候一般会在SVN上保存两个工程,一个是客户端工程、一个是美术工程。我先说说我是怎么样做的, 最后我再说我为什么要这样做。
1.保证资源不出问题
如果给了美术或者策划上传资源的权限,那么很有可能他们上传了错误的资源,或者它们不小心上传了错误的资源,那么程序一更新就报错了。。有些错误往往找到最后都是资源的问题,所以我们要尽量避免出现资源错误的情况。我举个典型的例子,比如每个模型都有一个动画叫”Attack” ,那么美术写错了某一个模型的动画,一般游戏少说也有100多个模型,资源一起提交以后鬼知道那个模型的动画写错了。我现在的做法是,在美术SVN工程中,做了一个按钮专门用来检查资源,美术当把模型、动画、贴图制作完成以后,先运行一下查错工具,如果没有错误然后在上传SVN。最好不要让美术手动做Prefab,只让他们做最原始的模型、动画、贴图、根据项目的需求写工具来生成Prefab,总之就是要保证美术上传的资源一定要正确的。
客户端工程找一个合适的时间来同步美术工程,两个工程的目录结构要完全一样。同步工程的操作让策划来完成就可以了,因为策划不仅要同步美术工程,他还需要同步数据表格。以我对策划的了解他们写错表格的可能性非常大, 举个典型的例子,比如掉落表中有一个装备的掉落,它指向装备表中的主键是100的这件装备,如果装备表中恰巧策划忘配 主键为100的这个装备。那么程序获得到这件掉落的时候必然就报错了。。。。程序里面很多问题找到最后都是因为策划表格写错了字段引起的。。所以作为程序我们一样要给策划写检查错误的工具。
写到这里我要先声明一下,我并没有对美术和策划另眼相看。只是我觉得很多细节的东西,人脑操作肯定没有电脑操作安全,就拿表格来说吧如果是我我肯定也会写错的。既然能用工具来代替人脑来检查这是多么好的一件事情啊。 至于检查工具怎么写,这得根据你的项目而定,总之我们做程序就是要用工具来避免美术和策划犯错误。
2.常用检查工具
同步场景
首先如果你的场景同步过来了很多Scene文件,需要在BuildSetting里面手动的Add Current进去,这样做很麻烦,不要手动,我们要自动嘿嘿。
创建一个文件夹命名Editor,无论它的目录在哪里都可以主要叫Editor就行,把如下代码放到Editor文件夹下。
Easy.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
using UnityEngine; using System.Collections; using UnityEditor; using System.Collections.Generic; using System.IO; public class Easy : Editor { [MenuItem("Tools/同步所有场景到SceneSetting文件")] static void CheckSceneSetting() { List<string> dirs = new List<string>(); GetDirs(Application.dataPath,ref dirs); EditorBuildSettingsScene[] newSettings = new EditorBuildSettingsScene[dirs.Count]; for(int i =0; i< newSettings.Length;i++) { newSettings[i] = new EditorBuildSettingsScene(dirs[i],true); } EditorBuildSettings.scenes = newSettings; EditorApplication.SaveAssets(); } private static void GetDirs(string dirPath, ref List<string> dirs) { foreach (string path in Directory.GetFiles(dirPath)) { if(System.IO.Path.GetExtension(path) == ".unity") { dirs.Add(path.Substring(path.IndexOf("Assets/"))); } } if (Directory.GetDirectories(dirPath).Length > 0) { foreach (string path in Directory.GetDirectories(dirPath)) GetDirs(path,ref dirs); } } } |
然后点击Tool/同步所有场景到SceneSetting文件 ,程序会自动将场景中的所有.unity 的Scene文件同步在BuildSetting中。
同步资源
Unity提供了导出的功能,一般是选择一个需要导出的场景或者Prefab,然后选择Export Package.. 。我个人觉得这个东西非常难用,因为如果你的Prefab上面绑定有脚本,当你导出的时候Unity会自动关联上所有脚本,不管你用不用。。太恐怖了。。。。。 一大堆导出的文件。
也不是不可以用,有一个比较讨巧的方法。首先选择Prefab,然后右键Select Dependencies,这样就可以自动关联Prefab所有的文件。
关联好以后,在右键选择ExportPackage… 如下图所示,记住一定不要勾选Include dependencies 。这样因为我的Prefab只绑定了一个脚本,所以图中这里只会关联绑定的哪个脚本,别的脚步就不会被关联的。。
但是我觉得最好的最好还是自己写一个工具,嘿嘿。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[MenuItem("Assets/new Export Assets")] static void Build() { if(Selection.objects == null ) return; List<string> paths = new List<string> (); foreach(UnityEngine.Object o in Selection.objects){ paths.Add(AssetDatabase.GetAssetPath(o)); } AssetDatabase.ExportPackage(paths.ToArray(), "Assets/UnityPackage/"+Selection.objects[0].name+"andxxx.unitypackage", ExportPackageOptions.IncludeDependencies); AssetDatabase.Refresh(); Debug.Log("Build all Done!"); } |
选择一个或多个Prefab 或者Scene文件,然后右键选择new Export Assets ,创建一个UnityPackage的文件夹, 这样导出的.unitypackage 就会放在里面啦。
导出出以后,然后双击装在客户端工程里面就可以了。
回到文章的开篇,为什么要用两个工程。如果用一个工程美术和策划必须很小心很小心,比如美术要做一个很庞大的场景,可能要做一周左右,如果在一个工程下,美术没做完是不应该上传的(可能程序就会出错),但是如果不上传SVN资源又不小心弄丢了几天的工作不就白费了么。而且一旦给了美术程序的权限,那么Unity里面那么多设置的选项,美术一不小心改了,有可能就是一个bug。
如果使用两个工程,美术可以每天都上传保证自己的工作,等整个场景都做完以后,使用检查错误的工具检查发现没有错误,此时在同步在客户端的工程中。 这样可以找一个合适的同步资源的时间点,既可以保证程序的正确,也可以保证资源的正确。
如果两个工程的目录,命名都严格按照规范,那么此法是必然可行的。
- 本文固定链接: https://www.xuanyusong.com/archives/2497
- 转载请注明: 雨松MOMO 于 雨松MOMO程序研究院 发表
美术和策划需要在游戏里面看到游戏效果…
momo大神 ,想要让美术和策划不拿到程序的代码 然后又能在unity里面运行 用什么方法比价好啊
你好,我想问一下,美术跟策划是能不能拿到程序工程的?还有,有时候美术工程需要代码来调技能特效之类的(比如技能编辑器),即使能拿到代码,他们也要在两个工程之前导来导去的,这样感觉很麻烦的样子,楼主你们是怎么解决的?
svn外链, 我博客里有说。
有一个问题,如果我要在导出的时候删除某个组件再打包要怎么破?我本来是想拷贝选择的预置到新的目录,修改,然后再export 可是导出来的unity文件只有单个预置文件,没有depend的相关文件,查看下发现在ExportPackage执行之后meta文件都变了,还有什么方法么?
您好,请问我在mac上制作的人物预设,在mac上人物动作特效运行正常,但是把工程拷贝到windows下 有些特效就不显示了。 但是在windows下重新制作预设的话,是可以正常播放特效的。这个是什么原因照成的? 怎么解决呢? 还有就是如果非得重新制作预设,有没有批量复制粘贴预设上的组件呢,因为重新做预设,上面绑定的组件实在太多,一个个复制粘贴太麻烦了。 ,求回复
受教了~ 正在搞一发
HI, 楼主你好, 请问你所说的美术工程,是不包含程序脚本代码,仅用于美术场景、预设等编辑用吗
D:/Minimap/AssetsRPG MinimapScenes1.unity
楼主你好,看了觉得很不错,我是一个新手,有一些地方不明白,我写好的工具的脚本了,怎么增加到编辑器呢?直接运行写好的脚本?还是把这个脚本放在一个指定的目录下?如UnityEditorData?求指教,谢谢。
这个不错,我们也在用两个工程,不过用脚本生成prefab和检查错误这个没弄过。要怎么弄呢?
以后可以写一点 嘿嘿。。。
嘿嘿。。。
顶顶顶…………..
谢谢哈。。
,,以前公司的网游就是策划一给表保证出错,要找很长时间,,我怎么就没想着要写查错工具呢 …还是思路太窄啊~~
哈哈。。 差错工具一定要写的。。。
以我对策划的了解他们写错表格的可能性非常大,哈哈哈哈哈
基本上表格一改,程序就报错了。。 都这样。。 所以检查工具一定要写。。。
哈哈哈哈,我能理解的。数据问题往往都比较头疼,我会有一种“不是我程序造成的问题,但是一定要我来帮你定位并指出来你就不能再仔细一点吗”的郁闷感。顶一个