GDAL(Geospatial Data Abstraction Library)是處理地理信息時很常用的一個開源庫,功能強大,支持數(shù)據(jù)格式非常廣泛。Unity是個很流行的三維游戲引擎,在地理信息行業(yè)做空間數(shù)據(jù)可視化也是個非常棒的工具。在實際工作中遇到的一個問題就是,怎么在Unity中引入GDAL的庫,從而使用GDAL提供的API以及強大的功能。
Unity開發(fā)使用的是C#語言,基于開源的.NET框架Mono。Unity中目前能使用的.NET庫的版本是2.0/3.5,運行時甚至是2.0。因此,在引入外部插件或者開發(fā)動態(tài)庫的時候,一定要選擇Unity能兼容的目標框架,如下圖所示。
查看運行時版本信息的代碼是:
Debug.Log(System.Environment.Version);
或者
using System;
using System.Reflection;
Type type = Type.GetType("Mono.Runtime");
if (type != null) {
MethodInfo displayName = type.GetMethod("GetDisplayName", BindingFlags.NonPublic | BindingFlags.Static);
if (displayName != null)
Debug.Log(displayName.Invoke(null, null));
}
GDAL本身是C++實現(xiàn)的,經過不同的接口封裝,出現(xiàn)了Python版本、C#版本等等。在選擇GDAL庫的時候,使用別人編譯好的版本即可,省的自己再去折騰,但是由于版本問題,只能選擇使用MSVC 2008(最高.NET 3.5)所編譯的動態(tài)庫,下載地址在這里:http://www.gisinternals.com/query.html?content=filelist&file=release-1500-x64-gdal-1-11-4-mapserver-6-4-3.zip
使用的時候注意,把GDAL相關的CSharp封裝庫(Managed DLL)放到Unity工程下面的Asset/Plugins文件夾下面,這樣VS2015在啟動的時候,會在CSharp工程中引用。
其他的dll文件(Native DLL)要保證在環(huán)境變量中,運行時搜索依賴的時候才能找得到。
參考
1.http://answers.unity3d.com/questions/924021/what-is-the-version-of-net-in-unity-5.html
2.https://docs.unity3d.com/Manual/UsingDLL.html