如何?Windows Phone代碼與Unity相互連信(事件方式)

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   檔案   for   ar   

  

一些廢話

昨天寫一篇今天寫一篇。不是我閑的蛋疼,是今天一天碰到了好幾個惱人的問題,浪費一天時間搞定。本文將是一篇比較有用的文章,當然前提是你要開發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,所以首先

Using System;

 然後定義一個事件,為其取名 Fucked;

public event EventHandler Fucked;

 定義一個屬性,將來讓其在WP的代碼中使用。

 public string FuckedOrNot;

  然後再定義兩個方法,分別修改FuckedOrNot屬性的值,再去觸發Fucked事件。

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中繪製兩個按鈕,用來執行這兩個方法。

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事件。

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真的很偉大。它讓很多人兒時的夢想得以實現,或者正在努力去實現。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.