学以致用,任何学问的学习都要立足于现实,努力实践,方可更进一步。Unity作为目前主流的3D游戏引擎,在各个领域已经展露出应用价值。此次借博客园宝地,针对一个具体的Unity项目的开发过程,将相关经验及感悟发布于此,只求记录过程及对他人有所帮助,望各位大神多指教,本文主要是对Unity项目开发环境如何搭建的经验总结。
首先,项目搭建在oschina平台下,通过Git工具进行工程版本管理,经过学习网络大神的资料,总结出一个简单的环境搭建方案,不足之处很多希望各位看官多多指教。
搭建环境步骤如下:
第一步.Unity产品下载及安装(官方网站)https://unity3d.com/
第二步.oschina账号申请及工程创建。如果对于Git不熟悉,最好网补一下相关知识。GitHub由于网络等限制,目前作为备用。
第三步.Git及TortoiseGit安装。自己网络找最新版。
由于Unity项目的特点,需要在.gitignore文件内进行过滤,具体如下:
#===============#
#注意,将二级制的文件配置为txt格式:
#在 Edit->Project Settings->Editor->Version Control Mode 中选择 Visible Meta files。
#在 Edit->Project Settings->Editor->Asset Serialization Mode 中选择 Force Text。
#保存场景和项目。
#===============#
#===============#
Unity generated
#===============#
[Ll]ibrary/
[Tt]emp/
#===============#
Visual Studio / MonoDevelop generated
#===============#
[Ee]xportedObj/
[Oo]bj/
*.svd
*.userprefs
/*.csproj
*.pidb
*.suo
/*.sln
*.user
*.unityproj
*.booproj
#===============#
OS generated
#===============#
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
注意:TortoiseGit本地保存git用户名密码的配置。
添加关键信息即可:
第四步.Unity配置,由于有些资源Unity会存储为二进制格式,对于版本管理及对比不方便,因此,到菜单“Edit”->“Project Settings”->“Editor”,进行如下图配置。
第五步.代码文件注释头模板及自动填写(Windows版本)
1)到Unity的安装目录下文件夹ScriptTemplates:\Unity\Editor\Data\Resources\ScriptTemplates,Unity中的脚本创建使用的是模板拷贝,拷贝的就是这个文件夹下的脚本。
2)打开里面的 81-C# Script-NewBehaviourScript.cs.txt,这个是创建C#脚本的模板,在里面添加可替换注释模板:
下来进行Editor插件编写,并且将此脚本放到“Editor”目录下,Unity引擎会自动进行加载并运用,具体代码如下:
using UnityEditor;
using UnityEngine;
using System.IO;
public class AddFileHeadComment : UnityEditor.AssetModificationProcessor
{
/// <summary>
/// 此函数在asset被创建完,文件已经生成到磁盘上,但是没有生成.meta文件和import之前被调用
/// </summary>
/// <param name="newFileMeta">newfilemeta 是由创建文件的path加上.meta组成的</param>
public static void OnWillCreateAsset(string newFileMeta)
{
//此处添加一个消息框进行提示,每次修改文件头都有消息框弹出,作为Editor机制入门案例。
//避免新手文件放置错误导致无法调测,功能完备后可以自己注释掉。
EditorUtility.DisplayDialog("添加文件头注释", newFileMeta, "ok");
string newFilePath = newFileMeta.Replace(".meta", "");
string fileExt = System.IO.Path.GetExtension(newFilePath);
if (fileExt != ".cs")
{
return;
}
//注意,Application.datapath会根据使用平台不同而不同
string realPath = Application.dataPath.Replace("Assets", "") + newFilePath;
string scriptContent = File.ReadAllText(realPath);
//这里实现自定义的一些规则
scriptContent = scriptContent.Replace("#SCRIPTFULLNAME#", System.IO.Path.GetFileName(newFilePath));
scriptContent = scriptContent.Replace("#COMPANY#", PlayerSettings.companyName);
scriptContent = scriptContent.Replace("#AUTHOR#", "yaozhl");
scriptContent = scriptContent.Replace("#VERSION#", "1.0");
scriptContent = scriptContent.Replace("#UNITYVERSION#", Application.unityVersion);
scriptContent = scriptContent.Replace("#DATE#", System.DateTime.Now.ToString("yyyy-MM-dd"));
File.WriteAllText(realPath, scriptContent);
AssetDatabase.Refresh();
}
}
最后的效果:
第六步.项目结构
Unity项目和其他的应用开发项目不同,关键是把握住“基于组件”这四个字,不要用一般的项目组织来规划目录,但是需要建立一个“GameAssets”目录,这个目录主要功能就是和美工等资源导入目录,外部的非开发资源尽量通过此目录下的打包进行导入。
此节参考网文:http://www.jianshu.com/p/614de9913ff7 https://www.douban.com/group/topic/59120314/%20
Assets #unity3d 默认主目录。
-----Editor #编辑器类存放文件夹。以Editor命名的文件夹允许其中的脚本访问Unity Editor的API。如果脚本中使用了在UnityEditor命名空间中的类或方法,它必须被放在名为Editor的文件夹中。Editor文件夹中的脚本不会在build时被包含。
在项目中可以有多个Editor文件夹。
注意:如果在普通的文件夹下,Editor文件夹可以处于目录的任何层级。如果在特殊文件夹下,那Editor文件夹必须是特殊文件夹的直接子目录。
-----ExternalLibraries
-----GameAssets
------------|Materials
------------|Models
------------|Animations
------------|Prefabs
------------|Sounds
------------|Textures
------------|UI
------Plugins #dll和一些纯代码插件。Plugins文件夹用来放native插件。它们会被自动包含进build中去。注意这个文件夹只能是Assets文件夹的直接子目录。
在Windows平台下,native 插件是dll文件;Mac OS X下,是bundle文件;Linux下,是.so文件。
跟Standard Assets一样,这里的脚本会更早的编译,允许它们被之外的脚本访问。
------Resources #所有需要通过Resource.Load加载的资源都存放于此,Resources文件夹允许你在脚本中通过文件路径和名称来访问资源。但还是推荐使用直接引用来访问资源。
放在这一文件夹的资源永远被包含进build中,即使它没有被使用。因为Unity无法判断脚本有没有访问了其中的资源。
项目中可以有多个Resources文件夹,因此不建议在多个文件夹中放同名的资源。
一旦build游戏,Resources文件夹中的所有资源被打包进游戏存放资源的archive中。这样在游戏的build中就不存在Resources文件夹了。即使脚本中仍然使用了资源在项目中的路径。
注意:当资源作为脚本变量被访问时,这些资源在脚本被实例化后就被加载进内存。如果资源太大,你可能不希望它被这样加载。那么你可以将这些大资源放进Resources文件夹中,通过Resources.Load来加载。当不再使用这些资源了,可以通过Destroy物体,再调用Resources.UnloadUnusedAssets来释放内存。
------Scenes
------Scripts
------StreamingAssets
第七步.工具类需求
Photoshop 必备
Microsoft Visual Studio 强烈推荐2015版,各种功能支持。
Unity版本管理注意事项
随着项目进展不断更新。
下一步准备介绍微型团队合适的Git开发流程模式。
经验总结:
新Unity项目由于要使用各种插件,请严格按照之前的目前结构规划,如果出现插件目录异常,尤其是根目前出现异常的情况,可以直接将相应目录拖至目标目录,这样Unity会自己组织文件关系,很方便。导入其他组件之前最好做一次全量提交,避免出现脚本冲突导致项目无法编译。
感觉Unity的项目开发环境的维护关键是深入了解Unity引擎内部的各种机制,这样可以提高对问题的分析及解决能力。