热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

unity3d工程原理_Unity3D研究院之程序工程和美术工程

做项目的时候一般会在SVN上保存两个工程,一个是客户端工程、一个是美术工程。我先说说我是怎么样做的,最后我再说我为什么要这样做。1.保证资源不出问题如果

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

1.保证资源不出问题

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

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

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

2.常用检查工具

同步场景

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

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

Easy.cs

C#

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

usingUnityEngine;

usingSystem.Collections;

usingUnityEditor;

usingSystem.Collections.Generic;

usingSystem.IO;

publicclassEasy:Editor{

[MenuItem("Tools/同步所有场景到SceneSetting文件")]

staticvoidCheckSceneSetting()

{

Listdirs=newList();

GetDirs(Application.dataPath,refdirs);

EditorBuildSettingsScene[]newSettings=newEditorBuildSettingsScene[dirs.Count];

for(inti=0;i

{

newSettings[i]=newEditorBuildSettingsScene(dirs[i],true);

}

EditorBuildSettings.scenes=newSettings;

EditorApplication.SaveAssets();

}

privatestaticvoidGetDirs(stringdirPath,refListdirs)

{

foreach(stringpathinDirectory.GetFiles(dirPath))

{

if(System.IO.Path.GetExtension(path)==".unity")

{

dirs.Add(path.Substring(path.IndexOf("Assets/")));

}

}

if(Directory.GetDirectories(dirPath).Length>0)

{

foreach(stringpathinDirectory.GetDirectories(dirPath))

GetDirs(path,refdirs);

}

}

}

然后点击Tool/同步所有场景到SceneSetting文件 ,程序会自动将场景中的所有.unity 的Scene文件同步在BuildSetting中。

同步资源

Unity提供了导出的功能,一般是选择一个需要导出的场景或者Prefab,然后选择Export Package.. 。我个人觉得这个东西非常难用,因为如果你的Prefab上面绑定有脚本,当你导出的时候Unity会自动关联上所有脚本,不管你用不用。。太恐怖了。。。。。 一大堆导出的文件。

也不是不可以用,有一个比较讨巧的方法。首先选择Prefab,然后右键Select Dependencies,这样就可以自动关联Prefab所有的文件。

关联好以后,在右键选择ExportPackage… 如下图所示,记住一定不要勾选Include dependencies 。这样因为我的Prefab只绑定了一个脚本,所以图中这里只会关联绑定的哪个脚本,别的脚步就不会被关联的。。

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

C#

1

2

3

4

5

6

7

8

9

10

11

12

13

[MenuItem("Assets/new Export Assets")]

staticvoidBuild()

{

if(Selection.objects==null)return;

Listpaths=newList();

foreach(UnityEngine.ObjectoinSelection.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。

如果使用两个工程,美术可以每天都上传保证自己的工作,等整个场景都做完以后,使用检查错误的工具检查发现没有错误,此时在同步在客户端的工程中。 这样可以找一个合适的同步资源的时间点,既可以保证程序的正确,也可以保证资源的正确。

如果两个工程的目录,命名都严格按照规范,那么此法是必然可行的。

最后编辑:2014-04-30作者:雨松MOMO

专注移动互联网,Unity3D游戏开发

捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!



推荐阅读
author-avatar
指定不告诉你
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有