資源描述:
《unity3d游戲開發(fā)之項目程序加密》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、如果稍微關(guān)注過這方面知識的朋友,應(yīng)該知道Unity3D做出來的項目是非常容易被反編譯的,被反編譯后你的所有資源和代碼都將會毫無遮掩的呈現(xiàn)出來。由于.net本身沒什么加密的措施,所以我們一般都是使用混淆代碼的方式來對程序進行一定的加密。??????接下來2篇博客,阿趙將會簡單的講一下我自己在Unity3D的程序加密做法。首先第一篇,我會簡單的說明一下怎樣在Unity3D里面使用dll動態(tài)鏈接庫,然后第二篇會說明怎樣對dll進行混淆。?開始第一篇的內(nèi)容:????首先,我們需要新建一個類庫項目,可以使用Visual
2、Studio或者Monodevelop來做。我這里是使用vs2012來創(chuàng)建:??????選擇好項目類型、寫好項目名稱。????新生成的項目里面默認有一個Class1類???????????可以通過在解決方案資源管理器里面進行重命名改成自己想要的類名,比如我這里改成了Math3D??????????然后寫一個簡單的靜態(tài)方法在里面。這里我寫了個最簡單的加法(Add)。也可以不寫靜態(tài)方法,寫出普通的public方法,用的時候new對象出來調(diào)用該方法也可以。這和正常的C#編程沒區(qū)別。????????????寫好之后,
3、在資源管理器里面選擇“生成”,那么在項目的bin/debug里面就會看到dll文件,比如我這個額項目就是AzhaoDll.dll?????接下來在Unity3D里面創(chuàng)建你需要的項目,把剛才的dll文件隨便放到項目的Assets文件夾里面。關(guān)于這個dll文件的存放位置,網(wǎng)上有些人說是必須放在插件文件夾里面,其實是不需要的,放在任意位置它都能被識別出來。當然,按照良好的項目路徑習慣,我們建立一個專門放插件的文件夾來存放dll文件,也是合理的。????然后在Unity3D里面創(chuàng)建一個C#腳本,寫一行簡單的代碼來調(diào)用
4、我們剛才寫的Math3D.Add方法。?????這時會發(fā)現(xiàn)Math3D類不能識別,我們usingAzhaoDll命名空間?????然后在Unity3D里把腳本掛到攝像機上,運行,可以看到打印出正確的結(jié)果了,這就證明了dll已經(jīng)被成功調(diào)用了。?????回顧剛才我們做的一些小細節(jié),在類庫項目的Math3D類里面。我們默認的使用了AzhaoDll命名空間。那么假如我們不使用命名空間,或者使用其他的命名空間行不行?答案是可以的,命名空間可以任意的更改,如果不用命名空間,那么在調(diào)用的時候就不需要using,如果使用了其
5、他命名空間,對應(yīng)的using其命名空間就行了。以下試試把命名空間刪掉:??????那么在Unity3D里面調(diào)用就直接可以用了:?運行的結(jié)果也是正常的:??????當然,不太建議不使用命名空間,這樣做一個說明,是因為unity3D本身創(chuàng)建的腳本默認沒有使用命名空間,只是想說明如果不想麻煩,直接把Unity3D沒有命名空間的腳本直接拿來編譯也是可以的文章出處【狗刨學習網(wǎng)】。????再次回顧細節(jié),剛才我們使用的是原生的C#,假如我們需要在類庫項目寫調(diào)用Unity3D本身功能的方法怎樣辦呢?在Unity3D的安裝目錄
6、EditorDataManaged里面,找到UnityEditor.dll和UnityEngine.dll兩個文件。??然后在類庫項目里面添加引用,把這兩個dll添加進來??????這時候,我們就可以在類庫項目里面usingUnityEngine來使用Unity3D的方法了,比如我們這里簡單寫了個CreateGameObject方法,生成一個名字為“CreateByDll”的gameobject。?????生成dll,放回Unity3D項目里,我們就可以調(diào)用這個方法:?????????運行,看到這個叫做“Cr
7、eateByDll”的物體生成出來了。?????通過以上的說明,我們會發(fā)現(xiàn)其實生成自己的dll在Unity3D里面用是很簡單的事情。我們還可以添加其他自己寫好的類進類庫項目,然后生成dll來使用。?????最后說一下注意事項了。????剛才生成的dll在Unity3D編輯器里面基本上都是能用的,但不一定能通過編譯。有可能在編譯成exe或者apk等時會報錯。需要注意的是,類庫項目使用的.NetFramework版本。我自己的嘗試是,使用.Net4.0以上版本發(fā)布的dll,在Unity3D里面會編譯不通過。所以我
8、們可以用2.0或者3.0之類的版本來發(fā)布。?????還有一些情況是某些現(xiàn)成的dll動態(tài)庫是使用完整的.Net2.0來發(fā)布的,所以我們在編譯的時候有可能需要選擇完整的.Net2.0來發(fā)布。?????到了這一步,我們就可以把Unity3D的整個代碼文件夾里面所有的腳本剪切到類庫項目里面生成dll,然后放回Unity3D項目里面。這樣別人就不能直接的編輯我們項目里面的代碼了。????不過dll本身是不安全