標籤:blog http 使用 檔案 for ar 2014 問題
源地址:http://www.cnblogs.com/petto/p/3909063.html
一些廢話
昨天寫一篇今天寫一篇。不是我閑的蛋疼,是今天一天碰到了好幾個惱人的問題,浪費一天時間搞定。本文將是一篇比較有用的文章,當然前提是你要開發Unity遊戲並發布到WP上。好了。不廢話了。進入本文。
實現Windows Phone代碼與Unity相互連信或者調用,一般來講有兩種辦法,一種是在Unity中定義事件,在wp代碼中對其進行註冊,然後在unity中某些情況下觸發該事件,在wp代碼中執行註冊該事件的方法;
另外一種是外掛程式方式,即在wp中編寫dll外掛程式,放在unity的Assets/Plugins/WP8 路徑下,然後在Unity中直接調用該外掛程式中的靜態方法即可。
今天說第一種——事件方式
Unity中需要乾的事兒
首先在Unity中直接建立一個指令碼,取名隨意,比如我這裡叫EventHanlders。
然後開啟VS對其進行編輯(什嗎?你就不用VS,你就用MonoDevelop?好吧,你願意跟自己過不去那我也沒轍)
因為Unity中預設不會的對System命名空間添加引用,而我們這裡要用到EventHandler,所以首先
然後定義一個事件,為其取名 Fucked;
1 |
public event EventHandler Fucked; |
定義一個屬性,將來讓其在WP的代碼中使用。
1 |
public string FuckedOrNot; |
然後再定義兩個方法,分別修改FuckedOrNot屬性的值,再去觸發Fucked事件。
1234567891011121314151617 |
public void BeFucked() { FuckedOrNot = "Fucked" ; if (Fucked != null ) { Fucked( this ,EventArgs.Empty); } } public void NotBeFucked() { FuckedOrNot = "NotFucked" ; if (Fucked != null ) { Fucked( this , EventArgs.Empty); } } |
好了,事件、屬性以及觸發的方法就寫好了。
接下來我們在OnGUI中繪製兩個按鈕,用來執行這兩個方法。
123456789101112 |
void OnGUI() { if (GUI.Button( new Rect(100, 100, 200, 150), "BeFucked" )) { BeFucked(); } if (GUI.Button( new Rect(100, 300, 200, 150), "NotFucked" )) { NotBeFucked(); } } |
至此,Unity中所需要的代碼就編寫完了。
下面將該指令碼拖拽到攝像機上,
然後將目標發布平台選為WP8,在功能表列中選擇 File->Builld Settings,點擊Windows Phone 8,點Switch Platform
然後點擊Build,選擇Build出來的工程的目標檔案夾:
然後確定,Unity就會為我們發布成為一個WP8的解決方案。相當吊啊。
WP中需要乾的事兒
現在開啟剛剛產生的工程。進入MainPage.xaml.cs檔案中,找到Unity_Loaded方法。
在裡邊直接註冊Fucked事件。
1234567891011121314 |
private void Unity_Loaded() { SetupGeolocator(); var eventHandlers = (EventHandlers)UnityEngine.Object.FindObjectOfType( typeof (EventHandlers)); eventHandlers.Fucked += eventHandlers_Fucked; } void eventHandlers_Fucked( object sender, EventArgs e) { Dispatcher.BeginInvoke(() => { MessageBox.Show((sender as EventHandlers).FuckedOrNot); }); } |
這裡需要說明的是,Unity並非在WP應用中的UI主線程中執行,所以想要執行UI主線程的代碼需要使用Dispatcher.BeginInvoke
好了。運行試試吧。
Let‘s Do it
:
是不是非常簡單。
這裡需要說一下,OnGUI這個方法在模擬器中執行會有些問題,比如剛剛我寫這個例子的時候,在模擬器中執行,我還沒有點擊Button,它會連續不斷地彈出“Fucked”,或“NotFucked”(我擦它啥意思啊,是問我日還是不日?),所以建議直接就在真機中調試就好了。
而且模擬器中的最佳化並不好,會讓人感覺很卡。實際上在真機中,即便是Lumia520,一般的Unity 2D跑起來都是毫無壓力的。
總結
我之所以寫這個文章是是在看不下去,目前Unity針對WP的文章還是相對較少的,微軟官方和Unity都出了相關的入門教程,但實際開發過程中還是會發現很多他們提不到的問題。比如Unity上非常流行的Json外掛程式無法在WP上使用,比如Unity上非常流行的MD5演算法,無法在WP上使用,比如Unity上非常流行的xxx無法在WP上使用。
哎呦尼瑪!好不容易在國外網站找到了一些比較全面的外掛程式,我擦!20美刀!我剛辭職沒工作了好麼?買不起只能自己寫。
其實今天我自己寫了針對WP 上使用Json和使用MD5的外掛程式。在下篇文章搞出來,誰想用誰就用。我也會逐步完善這個外掛程式,哪天放到git上去也許。
下一篇我會結合我實際開發來寫WP與Unity通訊的另一種方式——外掛程式。(貌似這種比較流行,畢竟複用性很強嘛)。
好了不廢話了。睡了睡了。
再說一句:Unity真的很偉大。它讓很多人兒時的夢想得以實現,或者正在努力去實現。