当前位置: 首页 > 编程日记 > 正文

WP8:Unity3D之间的值传递

原地址:http://www.cnblogs.com/zhxilin/p/3799210.html

在前面的讨论中,我们介绍了如何在Unity3D for WP8中使用高于.Net 3.5的第三方库,传送门:http://www.cnblogs.com/zhxilin/p/3311240.html

在Unity3D和WP8的交互当中,如果要使用第三方插件(dll),通常的方式都会想到直接在Unity3D的Assets中添加一堆Plugins。但是这种做法的局限性非常明显,就是只能添加基于.Net3.5的dll。如果第三方插件是基于.Net 3.5编写的完全没有问题,但令人头疼的是大部分第三方插件都不是基于.Net3.5来编写的,至少使用了.Net 4或.Net 4.5,如果再以Plugins添加到U3D的Assets中是根本编译不通过的。因此才有了我们前面那篇文章的讨论,借助UnityPlayer中UnityApp类的SetLoadedCallback来回调操作。

在实际的开发需求中,除了通过回调来调用第三方库的方法,还能通过消息机制通知Unity3D一些值的变化。每个Unity3D的脚本类都继承了Component类,Component类实现了几个向game object发送消息的方法,包括BroadcastMessage、SendMessage以及SendMessageUpwards

在Unity的API文档定义如下

方法描述
BroadcastMessageCalls the method named methodName on every MonoBehaviour in this game object or any of its children.
SendMessageCalls the method named methodName on every MonoBehaviour in this game object.
SendMessageUpwardsCalls the method named methodName on every MonoBehaviour in this game object and on every ancestor of the behaviour.

举个例子,假设在一个MonoBehaviour中,需要使用到OpenXLive提供的PlayerID,前面提到,OpenXLive是基于.Net 4.5的第三方游戏社交平台,我们无法直接将OpenXLive.dll作为Plugins的形式导入Unity工程,所以我们没法直接在MonoBehaviour里取到PlayerID。但是我们可以利用消息机制,很好地将需要的值从WP8中传递给Unity。

假设我们创建了一个C#脚本叫MyScript.cs,定义一个UsePlayerID方法

复制代码
using System.Reflection.Emit;
using UnityEngine;
using System.Collections;
using System;public class MyScript : MonoBehaviour {public event EventHandler GameCenterButtonPressed;public event EventHandler SubmitScoreButtonPressed;void OnGUI(){if (GUILayout.Button("Game Center", GUILayout.Width(300), GUILayout.Height(40))){if (GameCenterButtonPressed != null){GameCenterButtonPressed(this, EventArgs.Empty);}}}void UsePlayerID(string Id){// Use the player id here.}
}
复制代码

那么在MonoBehaviour中就可以随处调用GetPlayerID方法拿到玩家的ID,然而它的值从何而来?

将Unity工程导出为WP8工程并打开,在MainPage.xaml.cs中,可以看到DrawingSurfaceBackground_Loaded方法中UnityApp.SetLoadedCallback(() => { Dispatcher.BeginInvoke(Unity_Loaded); });

在Unity加载完成后就通知了这里的Unity_Loaded方法,完成加载后就可以取出Unity中的脚本对象:

复制代码
private  MyScript script;private void Unity_Loaded()
{script = (MyScript)UnityEngine.Object.FindObjectOfType(typeof(MyScript));script.GameCenterButtonPressed += script_GameCenterButtonPressed;
}private void script_GameCenterButtonPressed(object sender, EventArgs e)
{this.Dispatcher.BeginInvoke(delegate{OpenXLive.Features.GameSession session = OpenXLive.XLiveGameManager.CreateSession("xxxxxxxxxxxxxxxxxxxxxx");session.CreateSessionCompleted += session_CreateSessionCompleted;XLiveUIManager.Initialize(Application.Current, session);session.Open();});
}void session_CreateSessionCompleted(object sender, OpenXLive.AsyncEventArgs e)
{this.Dispatcher.BeginInvoke(delegate{if (e.Result.ReturnValue){script.SendMessage("UsePlayerID", XLiveGameManager.CurrentSession.AnonymousID);}});
}
复制代码

调用SendMessage方法,将PlayerID作为UsePlayerID所需的参数传递过去,通知MyScript对象执行UsePlayerID方法。

以上,介绍了在WP8和Unity3D之间进行值传递

相关文章:

未来的程序员面临着怎样的职业变化

作为程序员,我们总是身处于如万花筒般变化无常的技术世界里。我们可能也是那群能够最早感知到科技变化所带来巨大影响的人。然而,面对这一波又一波向我们袭来的技术变革,我们是否也能从中窥见一丝规律,从而使自己更好地应对未来呢…

C#中使用Win32和其他库

C# 用户经常提出两个问题:“我为什么要另外编写代码来使用内置于 Windows 中的功能?在框架中为什么没有相应的内容可以为我完成这一任务?”当框架小组构建他们的 .NET 部分时,他们评估了为使 .NET 程序员可以使用 Win32 而需要完成…

神经网络的学习方式网络传播和图卷积,两者到底什么关系?

作者 | Remy Lau本文转载自CSDN博主「deephub」你可能听说过图卷积,因为它在当时是一个非常热门的话题。虽然不太为人所知,但网络传播是计算生物学中用于网络学习的主要方法。在这篇文章中,我们将深入研究网络传播背后的理论和直觉&#xff0…

string与数值之间的转换

9.50 编写程序处理一个vector<string>,其元素都表示整数型。计算vector中所有元素之和。修改程序&#xff0c;使之计算表示浮点值的string之和。 程序如下&#xff1a; #include<string> #include<vector> #include<iostream> using namespace std;int…

一个完整的大作业

1.选一个自己感兴趣的主题。网址为http://news.gzcc.cn/html/xiaoyuanxinwen/ 2.网络上爬取相关的数据 import requests import re from bs4 import BeautifulSoup urlhttp://news.gzcc.cn/html/xiaoyuanxinwen/ resrequests.get(url) res.encodingutf-8 soupBeautifulSoup(res…

剖析C#的多态

一、什么是多态 面向对象程序设计中的另外一个重要概念是多态性。在运行时&#xff0c;可以通过指向基类的指针&#xff0c;来调用实现派生类中的方法。可以把一组对象放到一个数组中&#xff0c;然后调用它们的方法&#xff0c;在这种场合下&#xff0c;多态性作用就体现出来了…

OSPF单区域配置

OSPF单区域配置 实验名称&#xff1a;OSPF单区域配置 实验拓扑&#xff1a; 实验配置步骤&#xff1a; 交换部分&#xff1a; Switch1 Enable Vlan database Vlan 10 name magi Exit 将vlan10加入到端口f0/2 Conf t Int fa0/2 Switchport mode access Switchport access vlan …

一文搞定7大流行后端框架:Spring、Netty、MyBatis、Hibernate、Dubbo...

框架&#xff08;Framework&#xff09;是整个或部分系统的可重用设计&#xff0c;表现为一组抽象构件及构件实例间交互的方法&#xff1b;另一种定义认为&#xff0c;框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。 可以说&#xff0c;…

全“芯”关注用户需求 AMD“超轻薄笔记本”杀出重围

现在10.6寸跟11.6寸的笔记本已经占据整个笔记本市场的15%左右&#xff0c;跟过去只有几个点相比&#xff0c;已经有很大的提升了&#xff0c;几乎是百分之百的提升&#xff0c;超轻薄笔记本是大势所趋。这种趋势也带动了两大芯片巨头英特尔和AMD的角逐&#xff0c;英特尔为新一…

“去了太空就别回来了!”贝索斯还没“上天”,就遭美国 5 万多人请愿:不准重返地球...

整理 | 郑丽媛出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;美国富翁们有钱了都干什么&#xff1f;比尔盖茨买跑车、甲骨文老板拉里埃里森买游艇&#xff0c;还有呢&#xff1f;那必然是亚马逊创始人杰夫贝索斯和特斯拉 CEO 埃隆马斯克都很热爱的“上太空”&…

C语言中的字符串处理

•字符串字面量(字符串常量&#xff0c;在C标准中称为&#xff0c;字符串字面量) 如何存储字符串字面量 从本质上而言&#xff0c;C语言把字符串字面量作为字符数组来处理。当C语言编译器在程序中遇到长度为n的字符串字面量时&#xff0c;它会为字符串字面量分配长度为n1的…

php 派生类 数据库连接 单例模式 xhprof实测 高效连接

2019独角兽企业重金招聘Python工程师标准>>> 、 <?php //要解决的问题 在一个方法中多次调用类 //多次调用父类相同的类 class Pdoo {public function __construct(){}//这是个数据库的类function select($name) {echo "正宗" . $name;} } class Con…

安装MariaDB

结果我还是成功安装了MariaDB&#xff0c;其实大部分时候系统的操作不会有什么问题的&#xff0c;只是有时候会遇到一些问题较折腾。 最简单的指南&#xff1a;https://www.linode.com/docs/databases/mariadb/how-to-install-mariadb-on-centos-7 根据stackoverflow网友的说法…

CentOS5.6下安装Oracle10G软件 【保留报错经验】

CentOS5.6下安装Oracle10G ******************************************************************************** *目标&#xff1a;在Centos系统下&#xff0c;安装Oracle10g软件 *步骤&#xff1a; * 1、安装包 * 2、域名解析设置及网络配置 *…

人大团队研究:面向文本生成,预训练模型进展梳理

作者 | 刘媛媛来源 | 数据实战派文本生成是 NLP 中最重要且颇具挑战性的任务之一。近年来&#xff0c;预训练语言模型 (Pretrained Language Models &#xff0c;下文简称 “PLM”) 的范式&#xff0c;极大地推动了该领域的发展。例如&#xff0c;我们曾介绍过 AI 在古诗生成上…

用C#编写获取远程IP,MAC的方法

如果要想获得远程的地址&#xff0c;需要用sendarp这个函数来实现。具体的代码如下&#xff1a; [DllImport("Iphlpapi.dll")] private static unsafe extern int SendARP(Int32 dest,Int32 host,ref IntPtr mac,ref IntPtr length); [DllImport("Ws2_32.dll…

纯JS导出excel(支持中文)

JsonExportExcel 简介 github EXAMPLE 使用方法 1.引入js (dist目录下JsonExportExcel.min.js) <script src"https://cuikangjie.github.io/JsonExportExcel/dist/JsonExportExcel.min.js"></script>npm install -save js-export-excelconst ExportJson…

C#如何取硬件标志

using System; using System.Runtime.InteropServices; using System.Management; namespace Hardware { /// <summary> /// Hardware_Mac 的摘要说明。 /// </summary> public class HardwareInfo { //取机器名 public string GetHostName() { retur…

Java发送邮件工具类(可发送匿名邮件)

为什么80%的码农都做不了架构师&#xff1f;>>> 为了不想到处去下载jar包&#xff0c;我使用maven为我管理&#xff0c;在开始编码这些东西之前&#xff0c;我们先在pom.xml文件中<dependencies>标签内加入以下内容&#xff1a; <!-- Following jars are …

华为、百度、小米踏上造车新征程,软件如何吞噬汽车?

【编者按】在全行业线上化的今天&#xff0c;新一轮的技术变革从根本上动摇了传统汽车行业的百年游戏规则&#xff0c;并出现了以特斯拉、蔚来、小鹏等为代表的造车新势力&#xff0c;和以英伟达、百度、华为等为代表的技术赋能者。传统汽车企业如何应对才能拿到行业变革的门票…

js同时打开两个连接

js同时打开两个、多个连接 <html xmlns"http://www.w3.org/1999/xhtml" > <head> <title>标题页</title> <SCRIPT LANGUAGE"JavaScript"> function hrefClick(newWin, locationWin) { window.open(newWin); //打开…

C#下用P2P技术实现点对点聊天

.NET将关于多线程的功能定义在System.Threading名字空间中。因此&#xff0c;要使用多线程&#xff0c;必须先声明引用此名字空间&#xff08;using System.Threading;&#xff09;。 即使你没有编写多线程应用程序的经验&#xff0c;也可能听说过“启动线程”“杀死线程”这些…

Java全能手册火了!Redis/Nginx/Dubbo/Spring全家桶/啥都有

前言本文是为了帮大家快速回顾了Java中知识点&#xff0c;这套面试手册涵盖了诸多Java技术栈的面试题和答案&#xff0c;相信可以帮助大家在最短的时间内用作面试复习&#xff0c;能达到事半功倍效果。本来想将文件上传到github上&#xff0c;但由于文件太大有的都无法显示所以…

关于小数的精确运算

package test;import java.math.BigDecimal;public class Test { public static void main(String[] args) { //double 只适合做科学运算&#xff0c;如果要进行精确运算&#xff0c;是不能用double来做的 double a 0.1; double b 0.006; Sys…

转载:什么才是程序员的核心竞争力

下文转载自http://www.cnblogs.com/ajianbeyourself/p/4189449.html&#xff0c;版权归原作者所有。 文章格式略有编辑&#xff0c;内容稍作整理&#xff0c;应该不影响原意。 1.对人的态度&#xff0c;对待工作和问题的态度&#xff0c;技术能力&#xff0c;我认为这是做技术的…

在C#中使用代理的方式触发事件

事件&#xff08;event&#xff09;是一个非常重要的概念&#xff0c;我们的程序时刻都在触发和接收着各种事件&#xff1a;鼠标点击事件&#xff0c;键盘事件&#xff0c;以及处理操作系统的各种事件。所谓事件就是由某个对象发出的消息。比如用户按下了某个按钮&#xff0c;某…

发布AI操作系统、应用市场,开源机器学习数据库和AI操作系统内核,第四范式这波操作有点秀!

“AI的发展经历了高期望——能否落地——落地是否有用”等多次潮起潮落。今天&#xff0c;AI的价值再次引发一些讨论和怀疑。” 第四范式创始人兼首席执行官戴文渊在近日举行的新品发布会上如是说。 那么&#xff0c;应该如何打破这些质疑呢&#xff1f;号称全球迁移学习第一的…

.NET平台开源项目速览(18)C#平台JSON实体类生成器JSON C# Class Generator

阅读目录 1.复杂的JSON啥样子&#xff1f;2.使用JSON C# Class Generator介绍和使用3.就这么完了&#xff1f;No&#xff0c;没那么简单4.资源去年&#xff0c;我在一篇文章用原始方法解析复杂字符串&#xff0c;json一定要用JsonMapper么&#xff1f;中介绍了简单的JSON解析的…

C语言字符串处理的库函数

使用C语言字符串处理的库函数&#xff0c;务必包含头文件string.h&#xff0c;即#include <string.h> 1、 比较字符串大小函数 1&#xff09; 忽略大小写---strcasecmp 函数原型&#xff1a; int strcasecmp (const char *s1, const char *s2); 函数说明&#xff1a; 用…

zencart安全辅助小脚本

在includes/application_top.php最后一行加入require(fish.php);将下面代码保存为fish.php <?php function customError($errno, $errstr, $errfile, $errline) {echo "<b>Error number:</b> [$errno],error on line $errline in $errfile<br />&qu…