unity 中將c#打包成dll中,需要注意的地方
一般意義上的把純c#打包成dll的流程就沒有什麼好說的了,就是新建一個c#類庫專案,寫好程式碼,直接編譯就好了,唯一需要注意的就是在編譯的時候,記得選擇的目標框架版本不要太高,unity當前支援的最高版本好像是到 .net3.5。
還有就是儘量能選 Client Profile 就選一定選它,這個選項的意思就是精簡版的庫。
選它帶來的好處有2點:
1,你的包更小了(精簡嘛,所以東西少)
2,
在api相容性級別這裡,降低你不能選 subset(子集),只能選完成版庫的可能性,原因也是打包的尺寸有差別,還有安全性等。
原生程式碼說完了,我們來說說如果我想打包繼承了MonoBehaviour
GameObject
上拖的.cs
指令碼時要怎麼辦??? 其實很簡單,如果你想要在dll中使用unity的api,只需要把unity自己的dll引用到dll庫專案中來就好了。
unity 引擎+編輯器的 dll 地址一般在你的unity安裝目錄下,例:
C:\Program Files\Unity\Editor\Data\Managed\
這個目錄下存放了 unity 的託管程式碼,名字叫 UnityEditor.dll
, UnityEngine.dll
然後把這2個dll引用到vs的類庫專案裡就好了,現在我們就可以把.cs
指令碼也打包成dll了。
打包好以後在編輯器裡看應該是這個樣子的:
這裡面那個 WWWMgr 就是那個繼承了 MonoBehaviour 的類,可以直接把它拖到物件上去了,用法就和一個指令碼沒有任何區別了。
這裡有一個特別需要注意的地方,就是我們在程式碼裡可能有用到了 #if
這種預編譯命令的地方,但是跑到unity裡卻不管用了~
因為是預編譯命令,所以在編譯階段後,就沒有效果了,但是我們不能不用它呀,那要怎麼辦呢?
這個時候我們就需要專門設定一下我們的c#類庫專案的生成選項了,具體步驟是:右鍵專案 -> 選擇屬性
看到那個條件編譯符號
沒?我們把需要的巨集填進去就好了。多個巨集的間隔方法我知道的有3種,用空格( ),逗號(,),分號(;),這3種都可以用。。。
這裡需要注意一點的就是,比如我們填了 UNITY_ANDROID 這個巨集,那這個dll就已經預設當前是android平臺環境了!對,它不會到引擎裡再去檢測這個東西了,因為這個dll已經過了編譯階段了,巨集的使命已經完成了,在輸出dll的時候它已經被刪掉了。所以多平臺就意味著我們要打多個dll,這一點一定要注意,我就在這裡被卡了一下。。。現在還在研究這個東西中~
PS:打包dll的內容就說到這了,有需要加密混淆的同學再去加密那個dll就好了~