最近研究了下Unity對Dll的調用。查了一些資料,總結如下。
為什么要用DLL?
答:
1:你選擇用來開發的編程語言並不被Unity支持(如 F#),這個時候你就可以考慮把這樣的代碼編譯成DLL文件。
2:你並不想讓代碼公開,只是想提供調用接口,那么DLL是一個很好的選擇。
怎么做?
答:回答這個問題,首先要解決“怎么創建Unity3d 支持的DLL”和“Unity3D要怎么使用DLL.”
1. 創建Unity3d支持的DLL
(1)選擇合適的編譯器(因為Unity並不能確保支持所有編譯器編譯的.Net代碼)。
如:MonoDevelop Visual Studio
(2)確定代碼是否基於Unity的API。
如果DLL文件不包含基於Unity的API的代碼,你仍然可以使用合適的編譯選項把它編譯成DLL文件。
如果你想使用Unity的API,則你需要在編譯器中引用Unity的DLL,有兩個分別是UnityEngine.dll和UnityEditor.dll。
Mac系統上Unity的DLLS路徑一般是:
/Applications/Unity/Unity.app/Contents/Frameworks/Managed/
Windows系統中,DLLS能在Unity應用的安裝文件夾中找到。路徑一般是:
C:\Program Files(x86)\Unity\Editor\Data\Managed
最后,准確的編譯DLL將取決於編譯器的使用。
例:Mono C#編譯器的命令行,在Mac系統上mcs可能像下面這樣
mcs -r:/Applications/Unity/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll -target:library ClassesForDLL.cs
這里,-r指定了發布時被包含的庫的路徑,在這個例子中是UnityEngine的庫。-target指定了發布時需要的文件;"library"被用於選着的發布一個DLL。最后,ClassForDLL.cs就是將要被編譯的文件。 (假定這個文件是在當前工作目錄,如果必要的話你可以指定文件使用的完整路徑)。如果一切順利,生成的DLL文件不久就會出現在源文件的同一文件夾下。
2. Unity3d使用DLL文件
一旦編譯好,DLL文件就可以像其他資源一樣被拖進Unity的工程里面。DLL資源上有個小三角形,用來揭示庫里面單獨的一些類。繼承自MonoBehaviour類可以像普通的腳本拖到游戲對象上。Non-MonoBehaviour類可以以平時的方式直接在其他腳本中使用。
參考文獻:http://docs.unity3d.com/Documentation/Manual/UsingDLL.html
附上一個 Demo,點擊下載