如何?Windows Phone代碼與Unity相互連信(外掛程式方式)

來源:互聯網
上載者:User

標籤: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之間調用的情境了。

 

總結

好了就說這麼多了。困死了。

對自己說,加油。對看這篇文章的你說,加油。

我相信有很多人做遊戲都是為了實現兒時的一個夢想。在夢想面前,任何東西都是裝飾物,沒有困難就沒有實現的價值。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.