Unity3D研究院之程序工程和美术工程

做项目的时候一般会在SVN上保存两个工程,一个是客户端工程、一个是美术工程。我先说说我是怎么样做的, 最后我再说我为什么要这样做。

1.保证资源不出问题

          如果给了美术或者策划上传资源的权限,那么很有可能他们上传了错误的资源,或者它们不小心上传了错误的资源,那么程序一更新就报错了。。有些错误往往找到最后都是资源的问题,所以我们要尽量避免出现资源错误的情况。我举个典型的例子,比如每个模型都有一个动画叫”Attack” ,那么美术写错了某一个模型的动画,一般游戏少说也有100多个模型,资源一起提交以后鬼知道那个模型的动画写错了。我现在的做法是,在美术SVN工程中,做了一个按钮专门用来检查资源,美术当把模型、动画、贴图制作完成以后,先运行一下查错工具,如果没有错误然后在上传SVN。最好不要让美术手动做Prefab,只让他们做最原始的模型、动画、贴图、根据项目的需求写工具来生成Prefab,总之就是要保证美术上传的资源一定要正确的。

         客户端工程找一个合适的时间来同步美术工程,两个工程的目录结构要完全一样。同步工程的操作让策划来完成就可以了,因为策划不仅要同步美术工程,他还需要同步数据表格。以我对策划的了解他们写错表格的可能性非常大, 举个典型的例子,比如掉落表中有一个装备的掉落,它指向装备表中的主键是100的这件装备,如果装备表中恰巧策划忘配 主键为100的这个装备。那么程序获得到这件掉落的时候必然就报错了。。。。程序里面很多问题找到最后都是因为策划表格写错了字段引起的。。所以作为程序我们一样要给策划写检查错误的工具。

          写到这里我要先声明一下,我并没有对美术和策划另眼相看。只是我觉得很多细节的东西,人脑操作肯定没有电脑操作安全,就拿表格来说吧如果是我我肯定也会写错的。既然能用工具来代替人脑来检查这是多么好的一件事情啊。 至于检查工具怎么写,这得根据你的项目而定,总之我们做程序就是要用工具来避免美术和策划犯错误。

 2.常用检查工具

同步场景

首先如果你的场景同步过来了很多Scene文件,需要在BuildSetting里面手动的Add Current进去,这样做很麻烦,不要手动,我们要自动嘿嘿。

创建一个文件夹命名Editor,无论它的目录在哪里都可以主要叫Editor就行,把如下代码放到Editor文件夹下。

Easy.cs

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只绑定了一个脚本,所以图中这里只会关联绑定的哪个脚本,别的脚步就不会被关联的。。

 

但是我觉得最好的最好还是自己写一个工具,嘿嘿。

[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.cnblogs.com/feiyanstudio/articles/7338246.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值