[Unity3D]Window Phone代码通信

如果要在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中的事件。
创建一个通信用的对象,并且要一直存在,不能被销毁。
如果读者有什么不懂的,敬请留言~

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值