如果要在Unity3D中接入Window Phone(以下简称WP)的广告SDK,则需要用到WP与Unity3D之间的消息传递。
本文将创建一个简单工程,有需要的人可以以此类推。
本工程主要功能实现了Unity3D中按钮事件传递到WP工程中,且在WP工程中对该按钮的颜色进行随机调整。
接下来就是正文,一步步来!
- 先创建一个Unity3D的工程,并导入NGUI(尝试了下UGUI,结果WP中不响应,不知道为什么,有空再研究吧!)。
- 创建一个WP与Unity3D交互用对象“Test”,然后附加上一个“Test”脚本。代码如下。
using UnityEngine;
using System.Collections;
using System;
using UnityEngine.UI;
public class Test : MonoBehaviour {
public event Action<int> onClickEvent;
public int _clickCnt;
public UILabel btnName;
// Use this for initialization
void Start () {
_clickCnt = 0;
}
// Update is called once per frame
void Update () {
}
public void OnClick()
{
++_clickCnt;
if (onClickEvent != null)
{
onClickEvent(_clickCnt);
}
btnName.text = _clickCnt + "次";
}
}
- 然后创建一个按钮,本人比较懒,名字就不改了,默认为“Control - Simple
Button”。然后将“Test”脚本附加到单机事件中,响应函数为“onClick”。如下。
- Unity3D的工程处理就到此结束了,接下来生成WP工程。因为本人使用的是Unity3D
5.3.1f1,在此版本中WP8已经被移除了,所以我们生成WP8.1的工程或者UWP的工程都可以,本人生成的是WP8.1的工程。如下:
- 打开WP8.1的工程,修改“MainPage.xaml.cs”文件。只对原有工程中的“MainPage”函数做了修改,然后添加了“UnityInitialized”、“InitOnAppThread”、“OnClick”三个函数,所以我只列出这几个。
public sealed partial class MainPage : Page
{
public MainPage()
{
AppCallbacks appCallbacks = AppCallbacks.Instance;
//...省略上面未修改部分
//添加初始化完成回调函数
appCallbacks.Initialized += UnityInitialized;//注册初始化完成事件
//...省略下面未修改部分
}
private void UnityInitialized()
{
AppCallbacks appCallbacks = AppCallbacks.Instance;
//在主线程初始化
if (appCallbacks.RunningOnAppThread())
{
InitOnAppThread();
}
else
{//如果在非主线程,则转到主线程执行
appCallbacks.InvokeOnAppThread(new AppCallbackItem(InitOnAppThread), true);
}
}
private void InitOnAppThread()
{
//查找通信对象
UnityEngine.GameObject test = UnityEngine.GameObject.Find("Test");
if (test == null)
{//未找到
return;
}
Test testscritp = test.GetComponent<Test>();
if (testscritp == null)
{//未找到
return;
}
//添加按钮响应事件
testscritp.onClickEvent += OnClick;
}
private void OnClick(int num)
{
//查找对象按钮对象
UnityEngine.GameObject obj = UnityEngine.GameObject.Find("Control - Simple Button");
if (obj == null)
{//未找到
return;
}
UIButton btn = obj.GetComponent<UIButton>();
if (btn == null)
{//未找到
return;
}
//随机修改一个颜色
btn.defaultColor = UnityEngine.Random.ColorHSV();
}
//...省略下面未修改部分
}
至此代码修改完成,生成部署一个!效果如下。
以上方式就可以在WP工程中响应Unity3D中的事件。
创建一个通信用的对象,并且要一直存在,不能被销毁。
如果读者有什么不懂的,敬请留言~