Unity3D所使用的第三方工具

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介:



前言

最近在研究Unity3D的结构和原理。关于Unity3D怎么用之类的教程在网上一找一大堆,想看教程之类的就不用看这篇文章了。我想做的是从使用Unity3D所看到的表象(表),摸透其设计原则和组织结构(里)。到现在以来做了不少工作了,现在理一下思路,将所分析到的东西和大家分享一下。这是第一篇,主要说明一下Unity3D所使用的第三方工具

一、环境

Unity4.6.0f3(这里提一下,4.6版本的最主要的新特色是新GUI系统,这部分Unity已开源)
Win7 64bit系统(我想其他系统应该是差不多的)

二、安装目录结构

首先,列出Unity4.6的安装目录层次和一些值得注意的文件(像一些临时文件、log就不列出了),并做上标注。现在我还一点都不明白的就不标注了,存疑的我也会标注好,如果大家有知道的或者我哪里说错了,请一定在评论中指出!

Editor[编辑器]

│  │  beast32.dll[Autodesk Beast]
│  │  beast64.dll[Autodesk Beast]
│  │  cairo.dll[Cairo绘图库]
│  │  CFLite.dll[Webkit的第三方扩展,OpenCFLite是一种便携式版本的苹果公司的开源CoreFoundation框架]
│  │  comerr32.dll[?Common error handler for mit kerberos v5 / gss distribution,Kerberos 5协议的免费实现的常见错误处理库]
│  │  FreeImage.dll[FreeImage图像处理库]
│  │  gssapi32.dll[Generic Security Service API,访问安全服务的API,Kerberos 5协议相关]
│  │  iconv.dll[GNU 字符编码转换库]
│  │  JavaScriptCore.dll[?JS处理库,应该是WebKit的一部分]
│  │  k5sprt32.dll[Kerberos 5协议相关]
│  │  krb5_32.dll[Kerberos 5协议库]
│  │  libcurl.dll[客户端URL传输库,可实现很多网络层协议]
│  │  libeay32.dll[OpenSSL相关库]
│  │  libiconv2.dll[GNU 字符编码转换库]
│  │  libintl3.dll[GNU library for native language support]
│  │  libmp3lame.dll[LAME MP3编码库]
│  │  libpq.dll[PostgreSQL访问库]
│  │  libxml2.dll[XML解析库]
│  │  libxslt.dll[提供XSLT支持,是libxml2的扩展]
│  │  mono.pdb[pdb文件?这不是VS编译时生成的的符号文件吗?]
│  │  msvcm80.dll[VC运行库]
│  │  msvcp80.dll[VC运行库]
│  │  msvcr71.dll[VC运行库]
│  │  msvcr80.dll[VC运行库]
│  │  pthreadVC2.dll[pthread多线程库]
│  │  sqlite3.dll[SQLite3库]
│  │  ssleay32.dll[OpenSSL相关库]
│  │  umbraoptimizer32.dll[艺术渲染中间件Umbra的优化组件]
│  │  umbraoptimizer64.dll[艺术渲染中间件Umbra的优化组件]
│  │  Uninstall.exe[卸载程序]
│  │  Unity.exe[主程序]
│  │  Unity.pdb[安装目录里带着163M的调试用的文件是什么鬼?]
│  │  UnityBugReporter.exe[错误报告程序]
│  │  UnityWebPlayer.exe[Unity WebPlayer的安装程序]
│  │  WebKit.dll[WebKit库]
│  │  zlib1.dll[zlib库]
│  ├─CFLite.resources[WebKit的一个第三房库CFLite的相关资源]

Data[数据]

│  │  ├─BuildTargetTools[生成目标所用的工具]
│  │  │  └─AndroidPlayer[?]
│  │  ├─CGIncludes[CG shader的包含文件,Surface Shader的生成会用到]
│  │  │      AutoLight.cginc[光照相关]
│  │  │      HLSLSupport.cginc[HLSL相关,包含大量的宏定义]
│  │  │      Lighting.cginc[光照相关]
│  │  │      TerrainEngine.cginc[地形相关]
│  │  │      Tessellation.cginc[曲面细分相关]
│  │  │      UnityCG.cginc[一些常用函数(CG版本)]
│  │  │      UnityCG.glslinc[一些常用函数(GLSL版本)]
│  │  │      UnityShaderVariables.cginc[一些Unity内部Constant定义、宏定义]
│  │  ├─Documentation[文档]
│  │  ├─Managed[?托管的,存放C#编译的dll]
│  │  ├─Mono[Mono的运行库]
│  │  ├─MonoBleedingEdge[?最新的Mono库,这些库有可能不稳定而导致问题]
│  │  ├─PackageManager[?包管理器,但具体管理的是什么包就不清楚了]
│  │  ├─PlaybackEngines[?引擎文件,可能是构建各个平台上的程序时所用的一些适配用的组件]
│  │  │  ├─androidplayer[安卓]
│  │  │  ├─blackberryplayer[黑莓]
│  │  │  ├─flashsupport[Flash]
│  │  │  ├─iossupport[IOS]
│  │  │  ├─linuxstandalonesupport[Linux]
│  │  │  ├─macstandalonesupport[mac]
│  │  │  ├─metrosupport[Metro]
│  │  │  ├─WebPlayer[?网页游戏]
│  │  │  ├─windowsstandalonesupport[Windows]
│  │  │  └─wp8support[Windows Phone 8]
│  │  ├─Resources[资源]
│  │  │  ├─Layouts[Unity编辑器的UI Layout]
│  │  │  ├─ScriptTemplates[Sctipt的模板,比如Surface shader、C#脚本,新建shader或脚本中的默认内容]
│  │  │  └─WebPlayerTemplates[?]

Tools[工具]

│  │  │  │  7z.dll[7Zip]
│  │  │  │  7z.exe[7Zip]
│  │  │  │  astcenc.exe[ARM ASTC纹理图像压缩/解压缩工具]
│  │  │  │  auto_quitter.exe[?]
│  │  │  │  binary2text.exe[?]
│  │  │  │  cg.dll[CG核心运行库]
│  │  │  │  convert.exe[ImageMagick,一种图像处理软件,可用于格式转换]
│  │  │  │  D3Dcompiler_46.dll[HLSL编译库]
│  │  │  │  D3Dcompiler_47-x64.dll[HLSL编译库]
│  │  │  │  D3Dcompiler_47.dll[HLSL编译库]
│  │  │  │  diff.exe[文件比较工具,2个文件间]
│  │  │  │  diff3.exe[文件比较工具,3个文件间]
│  │  │  │  etcpack.exe[压缩/解压缩ETC格式的图像的工具]
│  │  │  │  etcpack2.exe[压缩/解压缩ETC1/ETC2格式的图像的工具]
│  │  │  │  FBXMaxExport.ms[3DSMAX的MaxScript脚本,用于从MAX文件导出FBX文件]
│  │  │  │  FBXMayaExport.mel[Maya的MEL脚本,用于从MB文件导出FBX文件]
│  │  │  │  FBXMayaExport5.mel[Maya的MEL脚本,用于从MB文件导出FBX文件]
│  │  │  │  FBXMayaMain.mel[Maya的MEL脚本,主程序(看内容是对导出插件的版本进行了选择)]
│  │  │  │  GeometryToolbox.dll[?]
│  │  │  │  ImportFBX.dll[?]
│  │  │  │  ImportFBX.exp[?]
│  │  │  │  ImportFBX.lib[?]
│  │  │  │  lzma.exe[LZMA压缩/解压缩工具]
│  │  │  │  ModoToUnity.py[将MODO的lxo文件导出为FBX文件或DAE文件的工具]
│  │  │  │  Mono.Cecil.dll[Mono的Cecil库]
│  │  │  │  monolinker.exe[Mono CIL Linker]
│  │  │  │  PVRTexTool.exe[PVR格式纹理处理工具]
│  │  │  │  QuicktimeTools.exe[QuickTime视频处理工具]
│  │  │  │  ShaderFixor.exe[?]
│  │  │  │  umbraoptimizer32.dll[艺术渲染中间件Umbra的优化组件]
│  │  │  │  umbraoptimizer64.dll[艺术渲染中间件Umbra的优化组件]
│  │  │  │  umbraprocess32.exe[?]
│  │  │  │  umbraprocess64.exe[?]
│  │  │  │  Unity-BlenderToFBX.py[将Blender的文件导出为FBX文件或DAE文件的工具]
│  │  │  │  UnityShaderCompiler.exe[?估计是Surface Shader的编译器]
│  │  │  │  UnusedBytecodeStripper.exe[?]
│  │  │  │  Unwrap.dll[?好像是用来做UV展开的一个库]
│  │  │  ├─Beast[Autodesk的光照仿真中间件]
│  │  │  ├─SocketPolicyServer[?]
│  │  │  ├─UNITY-C4DToFBXConverter[将Cinema 4D的C4D文件转换为FBX的工具]
│  │  │  └─VersionControl[版本控制]
│  │  └─UnityExtensions[Unity的扩展]
│  │      └─Unity
│  │          └─GUISystem
│  │              └─4.6.0[新的GUI系统]

其它文件夹

│  ├─JavaScriptCore.resources
│  ├─Standard Packages[一些标准示例]
│  ├─Temp[临时文件夹,一些转换FBX时产生的中间文件就在这里面,当然用完即删]
│  └─WebKit.resources[WebKit的相关资源]
└─MonoDevelop[MonoDevelop IDE]

三、分析

可以看得出来,Unity用了超多的第三方工具!下面就列举下看看。

就按照出现的顺序来说吧。

1. Autodesk Beast

文件:beast32.dll/beast64.dll/thebeast.exe/thebeast-64.exe等

它是什么?

参考: http://gameware.autodesk.com/beast?lang=cn
Autodesk® Beast™ 是一组用于制作游戏中的逼真光照 (Realistic Lighting) 的工具。利用 Beast,开发者可以模拟自然光照效果:实时游戏环境中的色彩反弹 (Color Bounce)、柔和阴影、高动态范围光照 (High Dynamic Range Lighting) 和移动对象光照。Beast 有助于制作者提高游戏的视觉质量,创造更加引人注目的游戏体验。

应用

光照图的生成

2. Cairo

文件:cairo.dll

它是什么?

参考: http://cairographics.org/
Cairo提供了跨平台2D绘图的支持

应用

2D绘图,也可能是其他库的依赖项

3. Webkit

文件:WebKit.resources、JavaScriptCore.dll、WebKit.dll、JavaScriptCore.resources等

它是什么?

参考: http://www.webkit.org/
WebKit是一个开源的浏览器引擎

应用

与浏览器相关的功能,可能应用于内置的Asset Store、Web player等,也可能是其他库的依赖项

4. Kerberos 5协议

文件:comerr32.dll、k5sprt32.dll、krb5_32.dll、gssapi32.dll等

它是什么?

参考: http://zh.wikipedia.org/zh/Kerberos
Kerberos协议是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。

应用

可能用于网络认证中,比如游戏登录等(个人猜测,不确定),也可能是其他库的依赖项

5. FreeImage

文件:FreeImage.dll

它是什么?

参考: http://freeimage.sourceforge.net/
FreeImage是一款免费的、开源的、跨平台的,支持很多种图像类型的图像处理库。

应用

可能用于图像资源导入,图像格式转换,图像处理(如缩放、修改)中,也可能是其他库的依赖项

6. gettext(iconv / libiconv2 / libintl3)

文件:iconv.dll、libiconv2.dll、libintl3.dll

它们是什么?

参考: http://gettext.sourceforge.net/ http://www.gnu.org/software/libiconv/ http://www.gnu.org/software/libiconv/
iconv提供了在多种国际编码格式之间进行文本内码的转换的功能;libiconv是iconv的实现;libintl3提供了本地化语言支持

应用

可能用于文本的编码转换、本地语言支持(比如说一个游戏的不同语言版本)

6. cURL

文件:libcurl.dll

它是什么?

参考: http://curl.haxx.se/libcurl/
libcurl是一个免费易用的客户端URL传输库。

应用

基本和应用层网络相关的一切都可以用libcurl来实现(个人猜测),如FTP、HTTP、SMTP等协议

7. OpenSSL

文件:libeay32.dll、ssleay32.dll

它是什么?

参考: http://www.openssl.org/
OpenSSL是套开放源代码的软件函数库包,实现了SSL与TLS协议。

应用

可能是网络相关的如Webkit的依赖项

8. LAME

文件:libmp3lame.dll

它是什么?

参考: http://lame.sourceforge.net/
LAME是一个高质量MP3编码器(LGPL)

应用

可能用于MP3音频文件的生成,如将录音输出为MP3文件,也可能是其他库的依赖项

9. PostgreSQL

文件:libpq.dll

它是什么?

参考: http://www.postgresql.org/docs/9.4/static/libpq.html
libpq是PostgreSQL的C应用程序接口。libpq是一套允许客户程序向PostgreSQL服务器服务进程发送查询并且获得查询返回的库函数。

应用

用于访问PostgreSQL数据库

10. XML

文件:libxml2.dll、libxslt.dll

它是什么?

参考: http://xmlsoft.org/
libxml是一个用来解析XML文档的函数库;libxslt提供XSLT支持。

应用

用于读取、导入XML数据,也可能是其他库的依赖项

11. Pthreads

文件:pthreadVC2.dll

它是什么?

参考: http://zh.wikipedia.org/zh/POSIX%E7%BA%BF%E7%A8%8B
libxml是一个用实现了POSIX线程标准的库

应用

可能是Unity自身的一些功能采用了多线程时会用到,也可能是其他库的依赖项

12. SQLite3

文件:sqlite3.dll

它是什么?

参考: http://sqlite.org/
SQLite是一个独立的、无服务器的、无需配置的transactional SQL数据库引擎。

应用

可能是Unity自身的一些功能采用了SQLLite时会用到,或者某些游戏机制使用了SQLLite作为数据存储的手段,也可能是其他库的依赖项

13. Umbra

文件:umbraoptimizer32.dll、umbraoptimizer64.dll

它是什么?

参考: http://umbra3d.com/ http://www.cnblogs.com/umbra/archive/2012/07/31/2617456.html
Umbra 3提供了一种自动化遮挡裁剪系统。

应用

游戏中的遮挡裁剪

14. zlib

文件:zlib1.dll

它是什么?

参考: http://www.zlib.net/
zlib是提供数据压缩用的库。

应用

可能是FreeImage的依赖项,也可能用于其他需要数据压缩功能的程序或库中。

15. 7Zip

文件:7z.dll、7z.exe、lzma.exe

它是什么?

参考: http://www.zlib.net/
7-Zip是一款拥有极高压缩比的开源压缩软件。lzma.exe是其LZMA压缩、解压缩算法的实现。

应用

用于解压缩7z压缩文件,或者压缩文件为为7z压缩文件,可能在导入7z格式的文件时使用

16. ARM ASTC纹理

文件:astcenc.exe

它是什么?

参考: http://community.arm.com/thread/3981
astcenc是用于ARM ASTC纹理图像的压缩/解压缩工具。

应用

用于压缩/解压缩ARM ASTC纹理图像,可能用于移动设备的纹理转换过程

17. CG

文件:cg.dll

它是什么?

参考: https://developer.nvidia.com/cg-toolkit
Cg语言(C for Graphics)是为GPU编程设计的高级着色器语言,由NVIDIA公司开发。cg.dll是CG的运行库。

应用

用于CG语言的支持,这个比较老了,现在一般都用HLSL或者GLSL了

18. ImageMagick

文件:convert.exe

它是什么?

参考: http://www.imagemagick.org/script/convert.php
ImageMagick是一个用于查看、编辑位图文件以及进行图像格式转换的开放源代码软件套装。convert.exe是其组件,用于转换图像文件格式。

应用

用于处理图像,如格式转换、缩放等

20. HLSL

文件:D3Dcompiler_46.dll、D3Dcompiler_47-x64.dll、D3Dcompiler_47.dll

它是什么?

参考: https://msdn.microsoft.com/en-us/library/windows/desktop/dd607340.aspx
D3Dcompiler是Direct3D的一个组件,用于编译HLSL。

应用

用于编译HLSL

21. diff diff3

文件:diff.exe、diff3.exe

它是什么?

参考: http://en.wikipedia.org/wiki/Diff_utility http://en.wikipedia.org/wiki/Diff3
文件比较工具

应用

用于比较文件,可能用于检测某Asset文件是否变化,比如脚本文件是否变化,从而决定是否重新编译它

22. ETC/ETC1/ETC2纹理

文件:etcpack.exe、etcpack2.exe

它是什么?

参考: https://bitbucket.org/wolfpld/etcpak/wiki/Home http://en.wikipedia.org/wiki/Ericsson_Texture_Compression
etcpack是压缩/解压缩ETC格式的图像的工具;etcpack2是压缩/解压缩ETC1/ETC2格式的图像的工具。

应用

用于压缩/解压缩ETC/ETC1/ETC2纹理图像,可能用于移动设备的纹理转换过程

23. Maxscript脚本 MEL脚本

文件:FBXMaxExport.ms FBXMayaExport.mel FBXMayaExport5.mel FBXMayaMain.mel

它是什么?

参考: MAXScript MEL
FBXMaxExport.ms用于从MAX文件导出FBX文件;FBXMayaExport.mel FBXMayaExport5.mel FBXMayaMain.mel用于从MB文件导出FBX文件。

应用

用于MAX文件、MB文件导入Unity的过程(即转换为FBX的过程)

24. Python脚本

文件:ModoToUnity.py Unity-BlenderToFBX.py

它是什么?

参考: http://en.wikipedia.org/wiki/Diff_utility
ModoToUnity.py用于将MODO的lxo文件导出为FBX文件或DAE文件的脚本。MODO是一个3D建模软件;Unity-BlenderToFBX.py是将Blender的文件导出为FBX文件或DAE文件的脚本

应用

用于将MODO的lxo文件、Blender的3D文件导入Unity(即转换为FBX的过程)

25. QuickTime

文件:QuicktimeTools.exe

它是什么?

参考: https://developer.apple.com/quicktime/
视频处理工具

应用

用于处理视频文件,如压缩、转码等

26. UNITY-C4DToFBXConverter

文件:UNITY-C4DToFBXConverter下的cdl、cdl64文件

它是什么?

参考: http://en.wikipedia.org/wiki/Diff_utility
用于将Cinema 4D的C4D文件转换为FBX的工具

应用

用于将Cinema 4D的C4D文件转换为FBX的工具(这个应该是Unity自己写的)

四、总结

现在对上面的各类工具做一下分类和小结。

  1. 图形图像 - 3D模型导入(FBX): Maxscript脚本(3DSMax) / MEL脚本(Maya) / Python脚本(Modo/Blender)
  2. 图形图像 - 图像处理: FreeImage、ARM ASTC纹理、ImageMagick、ETCx纹理
  3. 图形图像 - 渲染: Autodesk Beast、Umbra、CG、HLSL
  4. 图形图像 - 2D绘图: Cairo
  5. 音频: LAME
  6. 视频: QuickTime
  7. 文本: gettext(iconv / libiconv2 / libintl3)、XML(libxml2)、diff / diff3
  8. 网络: Webkit、Kerberos 5协议、cURL(libcurl)、OpenSSL
  9. 数据库: PostgreSQL(libpq)、SQLite3
  10. 多线程:Pthreads
  11. 数据压缩:zlib、7Zip

这里只是从文件层面分析和列举了Unity4所使用的第三方工具。可以看出来,数量很多,类别很多,这也说明了游戏引擎或者说游戏开发工具的复杂性。

出处

本文转载自:https://zwcloud.net/  作者:zwcloud


本文转自赵青青博客园博客,原文链接:http://www.cnblogs.com/zhaoqingqing/p/5651776.html,如需转载请自行联系原作者

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
编解码 程序员 atlas
Unity 之 图集属性详解和代码示例 -- 拓展一键自动打包图集工具
图集只是当所有给低昂的纹理需要相同的着色器时采用的一种方法,如果一些纹理需要通过着色器应用独立的图形效果,它们就必须分离到自己的材质中,并在单独的组中打图集。
1739 0
Unity 之 图集属性详解和代码示例 -- 拓展一键自动打包图集工具
|
7月前
|
存储 自然语言处理 监控
【Unity 实用工具篇】| 游戏多语言解决方案,官方插件Localization 实现本地化及多种语言切换
Unity的多语言本地化是一个很实用的功能,它可以帮助游戏支持多种语言,让不同语言的玩家都能够更好地体验游戏。 而实现本地化的方案也有很多种,各个方案之间也各有优劣,后面也会对多个方案进行介绍学习。 本文就来介绍一个专门作用于多语言本地化的Unity官方插件:Localization 。 这个插件方便进行游戏的多语言本地化,让游戏支持多种语言,下面就来看看该插件的使用方法吧!
|
7月前
|
JSON C# 图形学
【Unity 3D】利用C#、Unity和Socket实现简单的在线聊天室工具(附源码 简单易懂)
【Unity 3D】利用C#、Unity和Socket实现简单的在线聊天室工具(附源码 简单易懂)
172 0
|
弹性计算 监控 测试技术
Unity3D 一些工具总结
Unity3D 一些工具总结
146 0
|
图形学 Windows
很好用的Unity编辑器扩展工具 Odin Inspector教程
Odin包含许多功能,例如Static Inspector,Project Validation,Odin Editor Windows和我们的开源Odin Serializer,它允许您在需要多态对象结构时扩展Unity的序列化功能,或者希望在运行时序列化和反序列化数据。
很好用的Unity编辑器扩展工具 Odin Inspector教程
|
图形学
Unity 编辑器开发实战【Editor Window】- Filter 物体筛选工具
Unity 编辑器开发实战【Editor Window】- Filter 物体筛选工具
333 0
Unity 编辑器开发实战【Editor Window】- Filter 物体筛选工具
|
图形学 UED
Unity2018新功能探索|图形渲染、下一代Runtime、众多美工工具!
关于Unity2018Unity2018增强了Unity的核心技术, 让创作者能够充分发挥自身才智,进行更有效协作。探索Unity广告如何获取新的用户利用Unity Ads全球广告网络推广游戏,坐拥广大新玩家访问高级游戏娱乐内容10亿以上的独立设备玩家触手可及在正确场合适时获取目标玩家,即玩家参与度最高时创作者的工作空间Unity Editor是艺术家、设计师、开发者和其他职业人员的创意中心,有2D 、3D场景设计工具, 故事和电影, 灯光, 音响系统,精灵管理工具,还有粒子特效和功能强大的dopesheet 动画系统。
1937 0
|
SQL JSON C#
Unity Excel转Json小工具excel2json
在开发中表格转字符数据必不可少,在Github搜到一个小工具excel2json,还不错,并且支持批量操作 给出的官方文档:https://neil3d.
2751 0
|
图形学
Unity 便捷小工具之批量更改UGUI Font(字体)
在项目开发过程中可能会遇到更改字体的需求,如果手动逐一更改实在是太麻烦,所以我们需要自动化,一键能解决的问题绝不点击两次 效果过下 源码如下 using UnityEngine; using System.
2291 0
|
C# 图形学
Unity C#基础之 特性,一个灵活的小工具
特性在框架中的应用也是很普遍,只需要在相应的类、字段、属性、函数等上面加上这个特殊的小东西就会在相应的元素上面添加一些特殊的应用效果,下面就为大家简单的介绍下特性的原理和应用场景 在往期的博客中有介绍过一些特性 Unity Debug输出到屏幕并保存到本地中的Conditional("EnableLog")特性 Unity Attributes中Unity自带的特性 Obsolete、Serializable等 下面咱们来聊一聊特性到底是个什么,都能干什么?为什么说它是一个灵活的小工具。
1892 0