標籤:blog http os io 檔案 ar 2014 問題
一些廢話
原文地址:
http://imwper.com/unity/petto/%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0windows-phone%E4%BB%A3%E7%A0%81%E4%B8%8Eunity%E7%9B%B8%E4%BA%92%E9%80%9A%E4%BF%A1%EF%BC%88%E6%8F%92%E4%BB%B6%E6%96%B9%E5%BC%8F%EF%BC%89.html
我的部落格遷到這裡了www.imwper.com,以後我的所有技術部落格應該都會在這裡首發,然後可能再去同步到cnblogs上。
今天是我第一款山寨遊戲登陸wp商店。說實話,這些日子為了這款遊戲著實辛苦,我也懶得倒苦水,就是辛苦就行了。非常感謝那麼多好朋友的鼓勵和支援,明知是山寨的,還給我好評。但是,山寨的嘛,總有些看不慣的有識之士,站在正義的角度上給予嚴厲的批評。這本身沒問題,山寨就是不對,不對就得批評,即便你多麼辛苦即便你有各種苦衷,那你也得呵呵。所以我欣然接受啦,但遊戲不會因此下架,而且有可能以後在不影響體驗的前提下加入廣告,換取一天10塊錢的早飯錢(為什麼這樣?我從很多人眼中無比理想的僱主那裡離職了,沒有任何收入。不賺些錢,我會被餓死。可是我餓死不餓死跟別人又有什麼關係呢?“反正山寨就是不對,我就是看不慣”)。希望大家能夠理解,我也相信大部分人能理解。我這個人一向喜歡簡單粗暴的方式解決問題,最看不慣幾個大老爺們兒磨磨唧唧罵來罵去什麼結果沒有,就過個嘴癮。所以我特希望真心看不慣我的人直接過來跟我面對面說,或者打電話,又或者QQ語音?咱能說明白就說,實在說不明白就打一架,輸了的認錯,就結了嘛。不過經驗表明,跟我見面後基本上不會打起來的,就算動手了,最終都成了朋友。畢竟能用同一種別人看起來奇葩的方式解決問題的,應該會很投脾氣。
上一篇部落格說的是wp與unity相互調用方式之一——事件。
這次說最常用也是複用性強的外掛程式方式。會有大量圖片和少量代碼。圖多殺貓,但博文用心,望能給看這篇文章的人一些協助。佛家講,強者自度,聖者度人。我是一枚屌絲,能協助一些認識或不認識的人,也算是小小功德一件了。
哦對了,這篇文章參考自unity官方文檔,這應該不算山寨吧?你要非說是,那我也沒轍只能呵呵了。
原文連結:http://docs.unity3d.com/Manual/wp8-plugins-guide-csharp.html
編寫WP外掛程式
ok進入正題。
首先建立一個空白solution,我給他起名叫 PettoStudio.WP.Plugins,你可以隨意了。步驟看圖就好了:
然後確定,進入一個沒有工程的空白解決方案。右鍵solution->添加->建立項目->找到wp的工程模板(因為vs2012跟2013不一樣,沒法文字詳述)->選擇wp的類庫工程。
工程名隨意,建議與剛剛的solution一致就行了,不過不一致我也打不到你。
單擊確定。
選擇sdk的版本是8.0(前提是你裝了多個版本的wp sdk)
好了。wp的外掛程式工程建好了。
注意,如果你剛剛的工程名與solution名不一致,這裡就要多幹一件事兒啦(不聽我的。該!)
右擊你的工程名->屬性。將程式集名稱和預設命名空間名稱都改成與你的solution一致的名字。
WP工程的準備工作完成了,寫代碼吧。
添加一個類,我們這裡起名叫“AUV”,然後在這裡隨便寫一個靜態方法(或者屬性)。我們就最簡單的return一個字串吧。完整代碼如下。
public static string GetAUVString() { return "WP8?AUV!!!"; }
好了。至此WP8的DLL就完成了.但這僅僅完成了外掛程式開發的一半。
建立Fake Dll
接下來。再建立一個新的工程,是的,還是在這個solution裡邊,不過此時模板要選擇Windows傳統型程式的類庫,另外.Net版本要選擇3.5.(什嗎?為什嗎?為什麼非得是3.5?好吧,我哪兒知道啊。問微軟跟unity去!)
這次的工程名不能寫跟solution一樣的啦。就寫FakeDll吧(贗品動態連結程式庫。呵呵)
建立完成後,需要也將程式集名稱與預設命名空間的名稱改為與solution一致了。這是為了成功欺騙unity而做的。不得不說,微軟跟unity在實現外掛程式的方式確實很優雅,應該是做到了以最少改動(添加)得到了想要的結果。(這也有可能為我們開發人員帶來大坑,怒摔…………)
ok,接下來還是重複操作,在這個FakeDll工程中建立於WP工程中同樣的類名,同樣的方法名。唯一可以不同的,是裡邊的實現。如下:
在這裡的AUV的類中的代碼:
public class AUV { public static string GetAUVString() { return "Not WP8?AUV!!!"; } }
嗯。這個是"Not WP8?AUV!!!";
到此,外掛程式開發完成,編譯兩個DLL。
添加到Unity中
將FakeDll工程產生的DLL複製到Unity的Assect/Plugins路徑下(什麼?沒有Plugins檔案夾?那你不會自己建立一個?);
將wp工程產生的DLL複製到Unity的Assect/Plugins/WP8路徑下(注意WP8是大寫,我不知道小寫可以不可以。我懶得試了,如果有特別勤快(閑得蛋疼)的朋友可以試下,順便把結果告訴我(謝謝))。
完成上述操作後結果
然後建立一個指令碼test.cs,開啟vs進行編輯。代碼如下:
private string _auv; void OnGUI() { GUI.Label(new Rect(100, 200, 200, 150), _auv); if (GUI.Button(new Rect(100, 400, 200, 150), "BeFucked")) { _auv = PettoStudio.WP.Plugins.AUV.GetAUVString(); } }
然後儲存。回到Unity中,執行試試,點擊BeFucked按鈕,看看結果。現實的是什麼?
"Not WP8?AUV!!!"為什麼這樣?這個執行的是哪裡的代碼?對,是FakeDLL中的代碼!為什麼不是WP8中的?
啊,因為你在Windows下執行的嘛,Unity根據環境自動執行外掛程式中的代碼。
好了,我們部署到WP上試試唄。
再看執行結果:
"WP8?AUV!!!";是吧,是我們想要的結果吧。
ok,至此,WP與Unity相互調用的方式——外掛程式方式就介紹完了。通過這種方式你可以寫很多很多的類庫,方便以後複用。比如市場的一些Task、選取照片、內支付等等。
我也會豐富我的PettoStudio.WP.Plugins,將來以供大家免費的直接用。
加上上一篇介紹的事件方式,基本上就可以覆蓋所有unity、wp之間調用的情境了。
總結
好了就說這麼多了。困死了。
對自己說,加油。對看這篇文章的你說,加油。
我相信有很多人做遊戲都是為了實現兒時的一個夢想。在夢想面前,任何東西都是裝飾物,沒有困難就沒有實現的價值。