赞
踩
本章主要介绍Unity的一些基础内容,包括起源,网址,资源等,是一个杂乱的相当基本的知识汇总。读者只需大致了解一下,有个印象就好。
Unity的出现得益于游戏行业的快速发展。1992年,3D Realms公司/Apoges公司发布的小游戏《德军司令部》和id Software公司的射击游戏《Doom》成为了游戏引擎诞生初期的两部代表作,而其开发平台Doom引擎也成为了第一个被用于授权的引擎。第一款完全支持多边形模型,动画以及粒子特效的真正意义上的3D引擎则是Quake引擎,其开发的《Quake》游戏树立了FPS游戏操作标准。
然而此时Epic Megagames(EPIC)公司推出了后面大名鼎鼎的Unreal游戏引擎,并紧接着推出了Unreal2引擎及其升级Unreal2.5。2002年,Direct9时代到来,一个热爱游戏的团队Over the Edge Entertainment开发了第一代版本的Unity引擎。在2004年Unity公司在丹麦的阿姆斯特丹诞生,并于2005年将公司总部设在美国旧金山,同时发布了Unity1.0版本,至此,Unity引擎正式诞生。
Unity用户手册1官方网址:https://docs.unity3d.com/Manual/
Unity应用商店:https://assetstore.unity.com/
Unity是有个人版的,只要你的不是用于商业用途或者你的单位年收入在十万美元以下,都是可以免费使用的,当然,功能会是少一些,但对于初学者来说基本是没什么影响的。所以还是建议直接上Unity官网下载正版,同时注册一个Unity账号,这样能享受到Unity资源商店里的许多免费资源。
较新的Unity版本其各个功能都是模块化的,我们在安装时可以选择性安装各个功能组件,比如只安装核心编辑器,其余的文档通过网站浏览等,这样可以大大减少包体的体积。
那么下载完Unity后,怎么开始一个项目呢?下面附一张图,看完图相信你就明白了:
创建一个新项目会在你选定的地方创建一个该项目的文件夹,下面我以创建一个MyTest文件为例:
其中对UnityAnalytics还要多说几句,其是一个专门为游戏打造的免费分析服务,有专门的服务网站展示你项目的用户使用情况,不过在国内貌似被墙了。通过菜单栏Window-Services找到Services选项卡也能对其进行打开关闭。
那么创建完成的项目文件夹内部什么样的呢(以上面的MyTest项目为例)?
其中,sln,solusion表示解决方案;csproj,c sharp project表示C#项目。Assembly-CSharp-vs.csproj/Assembly-Csharp.csproj为C#脚本生成的VisualStudio和MonoDevelop的工程文件;同样的Assembly-UnityScript-vs.unityproj/Assembly-UnityScript.unityproj为UnityScript的工程文件(不是JavaScript哦)。想了解这些文件的意义?
在这些文件夹中,一般情况我们只需要对Assets文件夹和ProjectSettings文件夹进行控制就可以了。其它的如Library(存储将Asset下的资源导入成自身识别的格式和编译代码产生的DLL文件)都是由游戏引擎帮我们完成。
这些文件夹自然也是位于Assets文件夹下面,不过它们相对一般的自定义文件夹有着特殊的意义。
以".“开头或者以”~"结尾的文件夹会被忽略。在这种文件夹中的资源不会被导入,脚本也不会被编译,也不会出现在Project视图中。但我们可以在资源浏览器中找到这些文件。像上图中的“.vs”文件夹1。
Editor文件夹既可以在Assets文件目录下,也可以在其某个子文件夹里,只要名字叫做Editor就行。无论有多少个Editor文件夹,Editor文件夹中的资源文件或脚本都不会被打包进发布包中,也不能作为组件,并且脚本也只能在开发编辑时使用(同样的,有些脚本涉及到对编辑器的操作时,也必须放在这个文件夹里,如EditorWindow)。
因此,我们常常将一些开发工具放在这个文件夹里面,如:技能编辑器,资源打包工具等。
Editor Dafault Resourses,注意名称中间是有空格的,它必须被放在Assets目录下。你可以把编辑器用到的一些资源放在这里,比如图片,文本等。它和Editor文件夹一样不会被打到最终发布包里。你可以通过EditorGUIUtility.Load(“文件名”)来读取该文件夹下的资源,会优先查找该文件夹下的资源,然后再找Unity可能的内置同名资源。
当我们需要绘制提示图标,辅助线之类来辅助开发时,除了使用Debug.DragLine, Debug.DrawRay等来绘制之外,还可以使用Unity自带的Dizmos类。当组件继承了MonoBehaviour后,其生命周期里有OnDrawGizmos()方法,该方法只在编辑模式下每一帧执行,可用于在scene视图中绘制小物件。如下:
void OnDragGizmos()
{
Gizmos.DrawIcon(transform.position, "ImaInGizmos.png", true);
}
其中,ImaInGizmos.png就是放在Gizmos文件夹中的图片文件名字了,使用该函数可以直接调用位于该文件夹里的资源,发布时同样不会打入发布包中。
同样只能在Assets直接子目录下,这个文件夹存放用于拓展Unity功能的插件,如:原生动态(native)链接库,sdk,工具代码等。使用这些插件可以访问第三方代码库,系统API以及超出Unity功能的模块。因为该文件夹中的东西会在第一阶段编译,以保证在其它地方使用时能够找得到。当打包时,这些文件就会自动包含进发布包中。
Plugins中文件分为两种:Managed plugins(.NET编写的工具)和Native plugins(原生代码编写的库)。如我们需要导入解析Json文件的LitJson插件,就需要把该LitJson.dll文件放到Plugins目录下;NGUI源码也是放在该文件夹下。
当我们开发的游戏需要对接多个平台时,要分平台打包,就需要对不同平台的plugin区分。在Plugins目录下建立对应平台的文件夹,unity在为不同平台打包时,就会将对应平台plugin里的脚本编译成dll,还会把已经是dll, so等库直接拷贝到包内相应位置。
Plugins/x86: win32位平台plugin Plugins/x86_64: win64位平台plugin
Plugins/Android: Android平台 Plugins/iOS: iOS平台
属于第一阶段(最先)被编译的文件夹,往往用来存放导入的第三方资源包。
和Standard Assets一样,属于第一阶段(最先)被编译的文件夹,不同的是,里面的文件是给Pro版本的Unity使用的。
用来存放资源的特殊文件夹,可以在任何目录下,只要名字叫Resources就行,可以在不同文件夹下有多个叫Resources的文件夹。
放在Resources文件夹中的资源不管用还是不用都会被打包进发布包,Unity无法判断是否使用了其中的资源,所有在Resources中的资源都会被打包成一个缺省的AssetBundle(resources.assets)中。因此,一定要避免在不同Resources文件夹中出现同名资源的情况。当有同名资源的情况下,位于Standard Assets, Pro Standard Assets文件夹的优先级会较低(被认为是默认资源,当没有其它同名资源时才会找它)。
下面是资源加载方式:
Resources.Load("AssetName"); //编辑时和运行时都可以使用的方式,默认从Resources目录下读取
AssetDatabase.LoadAssetAtPath("AssetPath"); //需要引用UnityEditor,也就是说这种方式只能在编辑时使用,但它可以读取Assets目
录下的任意文件夹下的资源。路径格式为:”Assets/xx/xx.xxx”,需要带文件后缀
资源释放方式:
当你不需要这些资源了,可以通过Destroy()来摧毁创建的游戏物体,然后通过Resources.UnloadUnusedAssets()来释放出内存。
放在该文件夹中的资源也会全部打进包中,但是它是”原封不动“的打包进去(直接拷贝到包里),在游戏运行时只能读不能写。不同平台该文件的路径也不同,使用Unity的Application.StreamingAssetsPath会根据平台返回正确路径。
Mac OS or Windows: path = Application.dataPath + "/StreamingAssets"
IOS: path = Application.dataPath + ”/Raw“
Android: path = "jar:file://" + Application.dataPath + "!/assets/"
我们一般将初始的AssetsBundle资源放在该文件夹下,并且通过WWW或者AssetsBundle.LoadFromFile加载使用。
用来替换web build的默认网页,这个文件夹中的脚本都不会被编译,且该文件夹必须位于Assets目录下。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。