开发文章

Window Phone代码通信

如果要在Unity3D中接入Window Phone(以下简称WP)的广告SDK,则需要用到WP与Unity3D之间的消息传递。
本文将创建一个简单工程,有需要的人可以以此类推。
本工程主要功能实现了Unity3D中按钮事件传递到WP工程中,且在WP工程中对该按钮的颜色进行随机调整。
接下来就是正文,一步步来!

  • 先创建一个Unity3D的工程,并导入NGUI(尝试了下UGUI,结果WP中不响应,不知道为什么,有空再研究吧!)。
  • 创建一个WP与Unity3D交互用对象“Test”,然后附加上一个“Test”脚本。代码如下。
复制内容到剪贴板
  1. using UnityEngine;  
  2. using System.Collections;  
  3. using System;  
  4. using UnityEngine.UI;  
  5.   
  6. public class Test : MonoBehaviour {  
  7.   
  8.     public event Action<int> onClickEvent;  
  9.     public int _clickCnt;  
  10.     public UILabel btnName;  
  11.     // Use this for initialization  
  12.     void Start () {  
  13.         _clickCnt = 0;  
  14.     }  
  15.   
  16.     // Update is called once per frame  
  17.     void Update () {  
  18.     }  
  19.   
  20.     public void OnClick()  
  21.     {  
  22.         ++_clickCnt;  
  23.         if (onClickEvent != null)  
  24.         {  
  25.             onClickEvent(_clickCnt);  
  26.         }  
  27.         btnName.text = _clickCnt + "次";  
  28.     }  
  29. }  

然后创建一个按钮,本人比较懒,名字就不改了,默认为“Control - Simple
Button”。然后将“Test”脚本附加到单机事件中,响应函数为“onClick”。如下。

20160205141552224.png

Unity3D的工程处理就到此结束了,接下来生成WP工程。因为本人使用的是Unity3D
5.3.1f1,在此版本中WP8已经被移除了,所以我们生成WP8.1的工程或者UWP的工程都可以,本人生成的是WP8.1的工程。如下:

Unity3D的工程处理.png

打开WP8.1的工程,修改“MainPage.xaml.cs”文件。只对原有工程中的“MainPage”函数做了修改,然后添加了“UnityInitialized”、“InitOnAppThread”、“OnClick”三个函数,所以我只列出这几个。

复制内容到剪贴板
  1. public sealed partial class MainPage : Page  
  2.    {  
  3.        public MainPage()  
  4.        {  
  5.            AppCallbacks appCallbacks = AppCallbacks.Instance;  
  6.            //...省略上面未修改部分  
  7.            //添加初始化完成回调函数  
  8.            appCallbacks.Initialized += UnityInitialized;//注册初始化完成事件  
  9.            //...省略下面未修改部分  
  10.        }  
  11.   
  12.        private void UnityInitialized()  
  13.        {  
  14.            AppCallbacks appCallbacks = AppCallbacks.Instance;  
  15.   
  16.            //在主线程初始化  
  17.            if (appCallbacks.RunningOnAppThread())  
  18.            {  
  19.                InitOnAppThread();  
  20.            }  
  21.            else  
  22.           {//如果在非主线程,则转到主线程执行  
  23.                appCallbacks.InvokeOnAppThread(new AppCallbackItem(InitOnAppThread), true);  
  24.            }  
  25.        }  
  26.   
  27.        private void InitOnAppThread()  
  28.        {  
  29.            //查找通信对象  
  30.            UnityEngine.GameObject test = UnityEngine.GameObject.Find("Test");  
  31.            if (test == null)  
  32.            {//未找到  
  33.                return;  
  34.            }  
  35.   
  36.            Test testscritp = test.GetComponent<Test>();  
  37.            if (testscritp == null)  
  38.            {//未找到  
  39.                return;  
  40.            }  
  41.   
  42.            //添加按钮响应事件  
  43.            testscritp.onClickEvent += OnClick;  
  44.        }  
  45.   
  46.        private void OnClick(int num)  
  47.        {  
  48.            //查找对象按钮对象  
  49.            UnityEngine.GameObject obj = UnityEngine.GameObject.Find("Control - Simple Button");  
  50.            if (obj == null)  
  51.            {//未找到  
  52.                return;  
  53.            }  
  54.            UIButton btn = obj.GetComponent<UIButton>();  
  55.            if (btn == null)  
  56.            {//未找到  
  57.                return;  
  58.            }  
  59.            //随机修改一个颜色  
  60.            btn.defaultColor = UnityEngine.Random.ColorHSV();  
  61.        }  
  62.        //...省略下面未修改部分  
  63.    }  

至此代码修改完成,生成部署一个!效果如下。

效果.png

以上方式就可以在WP工程中响应Unity3D中的事件。
创建一个通信用的对象,并且要一直存在,不能被销毁。

感谢 星空不语 支持 磐实编程网 原文地址:
blog.csdn.net/u012741077/article/details/50638068?locationNu

文章信息

发布时间:2016-08-25

作者:星空不语

发布者:aquwcw

浏览次数: