如何实现Windows Phone代码与Unity相互通信(插件方式)
原地址:http://www.cnblogs.com/petto/p/3915943.html
一些废话
原文地址:
我的博客迁到这里了www.imwper.com,以后我的所有技术博客应该都会在这里首发,然后可能再去同步到cnblogs上。
今天是我第一款山寨游戏登陆wp商店。说实话,这些日子为了这款游戏着实辛苦,我也懒得倒苦水,就是辛苦就行了。非常感谢那么多好朋友的鼓励和支持,明知是山寨的,还给我好评。但是,山寨的嘛,总有些看不惯的有识之士,站在正义的角度上给予严厉的批评。这本身没问题,山寨就是不对,不对就得批评,即便你多么辛苦即便你有各种苦衷,那你也得呵呵。所以我欣然接受啦,但游戏不会因此下架,而且有可能以后在不影响体验的前提下加入广告,换取一天10块钱的早饭钱(为什么这样?我从很多人眼中无比理想的雇主那里离职了,没有任何收入。不赚些钱,我会被饿死。可是我饿死不饿死跟别人又有什么关系呢?“反正山寨就是不对,我就是看不惯”)。希望大家能够理解,我也相信大部分人能理解。我这个人一向喜欢简单粗暴的方式解决问题,最看不惯几个大老爷们儿磨磨唧唧骂来骂去什么结果没有,就过个嘴瘾。所以我特希望真心看不惯我的人直接过来跟我面对面说,或者打电话,又或者QQ语音?咱能说明白就说,实在说不明白就打一架,输了的认错,就结了嘛。不过经验表明,跟我见面后基本上不会打起来的,就算动手了,最终都成了朋友。毕竟能用同一种别人看起来奇葩的方式解决问题的,应该会很投脾气。
上一篇博客说的是wp与unity相互调用方式之一——事件。
这次说最常用也是复用性强的插件方式。会有大量图片和少量代码。图多杀猫,但博文用心,望能给看这篇文章的人一些帮助。佛家讲,强者自度,圣者度人。我是一枚屌丝,能帮助一些认识或不认识的人,也算是小小功德一件了。
哦对了,这篇文章参考自unity官方文档,这应该不算山寨吧?你要非说是,那我也没辙只能呵呵了。
原文链接:http://docs.unity3d.com/Manual/wp8-plugins-guide-csharp.html
编写WP插件
ok进入正题。
首先创建一个空白solution,我给他起名叫 PettoStudio.WP.Plugins,你可以随意了。步骤看图就好了:
然后确定,进入一个没有工程的空白解决方案。右键solution->添加->新建项目->找到wp的工程模板(因为vs2012跟2013不一样,没法文字详述)->选择wp的类库工程。
工程名随意,建议与刚刚的solution一致就行了,不过不一致我也打不到你。
单击确定。
选择sdk的版本是8.0(前提是你装了多个版本的wp sdk)
好了。wp的插件工程建好了。
注意,如果你刚刚的工程名与solution名不一致,这里就要多干一件事儿啦(不听我的。该!)
右击你的工程名->属性。将程序集名称和默认命名空间名称都改成与你的solution一致的名字。
WP工程的准备工作完成了,写代码吧。
添加一个类,我们这里起名叫“AUV”,然后在这里随便写一个静态方法(或者属性)。我们就最简单的return一个字符串吧。完整代码如下。
1
2
3
4
|
public static string GetAUVString() { return "WP8?AUV!!!" ; } |
好了。至此WP8的DLL就完成了.但这仅仅完成了插件开发的一半。
创建Fake Dll
接下来。再创建一个新的工程,是的,还是在这个solution里边,不过此时模板要选择Windows桌面程序的类库,另外.Net版本要选择3.5.(什么?为什么?为什么非得是3.5?好吧,我哪儿知道啊。问微软跟unity去!)
这次的工程名不能写跟solution一样的啦。就写FakeDll吧(赝品动态链接库。呵呵)
创建完成后,需要也将程序集名称与默认命名空间的名称改为与solution一致了。这是为了成功欺骗unity而做的。不得不说,微软跟unity在实现插件的方式确实很优雅,应该是做到了以最少改动(添加)得到了想要的结果。(这也有可能为我们开发者带来大坑,怒摔…………)
ok,接下来还是重复操作,在这个FakeDll工程中创建于WP工程中同样的类名,同样的方法名。唯一可以不同的,是里边的实现。如下:
在这里的AUV的类中的代码:
1
2
3
4
5
6
7
|
public class AUV { public static string GetAUVString() { return "Not WP8?AUV!!!" ; } } |
嗯。这个是"Not WP8?AUV!!!";
到此,插件开发完成,编译两个DLL。
添加到Unity中
将FakeDll工程生成的DLL复制到Unity的Assect/Plugins路径下(什么?没有Plugins文件夹?那你不会自己新建一个?);
将wp工程生成的DLL复制到Unity的Assect/Plugins/WP8路径下(注意WP8是大写,我不知道小写可以不可以。我懒得试了,如果有特别勤快(闲得蛋疼)的朋友可以试下,顺便把结果告诉我(谢谢))。
完成上述操作后结果如图:
然后创建一个脚本test.cs,打开vs进行编辑。代码如下:
1
2
3
4
5
6
7
8
9
10
|
private string _auv; void OnGUI() { GUI.Label( new Rect(100, 200, 200, 150), _auv); if (GUI.Button( new Rect(100, 400, 200, 150), "BeFucked" )) { _auv = PettoStudio.WP.Plugins.AUV.GetAUVString(); } } |
然后保存。回到Unity中,执行试试,点击BeFucked按钮,看看结果。现实的是什么?
"Not WP8?AUV!!!"为什么这样?这个执行的是哪里的代码?对,是FakeDLL中的代码!为什么不是WP8中的?
啊,因为你在Windows下执行的嘛,Unity根据环境自动执行插件中的代码。
好了,我们部署到WP上试试呗。
再看执行结果:
"WP8?AUV!!!";是吧,是我们想要的结果吧。
ok,至此,WP与Unity相互调用的方式——插件方式就介绍完了。通过这种方式你可以写很多很多的类库,方便以后复用。比如市场的一些Task、选取照片、内支付等等。
我也会丰富我的PettoStudio.WP.Plugins,将来以供大家免费的直接用。
加上上一篇介绍的事件方式,基本上就可以覆盖所有unity、wp之间调用的场景了。
总结
好了就说这么多了。困死了。
对自己说,加油。对看这篇文章的你说,加油。
我相信有很多人做游戏都是为了实现儿时的一个梦想。在梦想面前,任何东西都是装饰物,没有困难就没有实现的价值。
如何实现Windows Phone代码与Unity相互通信(插件方式)的更多相关文章
- 如何实现Windows Phone代码与Unity相互通信(事件方式)
源地址:http://www.cnblogs.com/petto/p/3909063.html 一些废话 昨天写一篇今天写一篇.不是我闲的蛋疼,是今天一天碰到了好几个恼人的问题,浪费一天时间搞定.本文 ...
- 如何实现Windows Phone代码与Unity相互通信(直接调用)
我之前用了两篇文章写了WP与Unity相互通信.调用的办法,一个是事件,一个是插件. 这次来说个更简单的,我觉得这应该是Unity发布到WP或者Win Store上得天独厚的优势.毕竟都是C#. 懒得 ...
- Windows GUI代码与Windows消息问题调试利器
Windows GUI代码与Windows消息问题调试利器 记得很久前有这么一种说法: 人类区别于动物的标准就是工具的使用.同样在软件开发这个行业里面,对于工具的使用也是高手和入门级选手的主要区别,高 ...
- 利用Python编写Windows恶意代码!自娱自乐!勿用于非法用途!
本文主要展示的是通过使用python和PyInstaller来构建恶意软件的一些poc. 利用Python编写Windows恶意代码!自娱自乐!勿用于非法用途!众所周知的,恶意软件如果影响到了他人的生 ...
- Unity for Windows: III–Publishing your unity game to Windows Phone Store
原地址:http://digitalerr0r.wordpress.com/2013/08/27/unity-for-windows-iiipublishing-to-windows-phone-st ...
- Windows数字代码签名的作用和流程
什么是数字代码签名?数字签名代码是一种技术,它使用数字证书来识别软件的发布商和使用hash算法来确保软件的完整性.数字签名使用公共密匙签名书法被创建,它使用两种不同的密匙:公共密匙和私有密匙,我们称其 ...
- 记录一个Unity播放器插件的开发
背景 公司最近在做VR直播平台,VR开发我们用到了Unity,而在Unity中播放视频就需要一款视频插件,我们调研了几个视频插件,记录两个,如下: Unity视频插件调研 网上搜了搜,最流行的有以下两 ...
- windows 下实现函数打桩:拦截API方式
windows 下实现函数打桩:拦截API方式 近期由于工作须要,開始研究函数打桩的方法. 由于不想对project做过多的改动,于是放弃了使用Google gmock的想法. ...
- Unity的NGUI插件篇——入场效果
Unity的NGUI插件篇--入场效果 入场效果 入场效果须要借助于NGUI提供的TweenPosition类来完毕.为了说明此类的用法.本节将使会解说两个演示样例.本文选自 大学霸 <NGU ...
随机推荐
- [terry笔记]Oracle会话追踪(一):SQL_TRACE&EVENT 10046
SQL_TRACE/10046 事件是 Oracle 提供的用于进行 SQL 跟踪的手段,在日常的数据库问题诊断和解决中是非常常用的方法.但其生成的trace文件需要tkprof工具生成一个可供人 ...
- stm32f103 SPI单线TX发数据来驱动LCD
有一黑白LCD,有CS/SI/SCK三线,时序满足SPI时序,但STM32的SPI有四线NSS/MOSI/SCK/MISO,这里MISO没有用到.因此可以使用SPI的单线发送模式进行驱动LCD. 关键 ...
- 浅谈Objective—C中的面向对象特性
Objective-C世界中的面向对象程序设计 面向对象称程序设计可能是现在最常用的程序设计模式.如何开发实际的程序是存在两个派系的-- 面向对象语言--在过去的几十年中,很多的面向对象语言被发明出来 ...
- C基础 数据序列化简单使用和讨论
前言 C中对序列化讨论少, 因为很多传输的内容都有自己解析的轮子. 对于序列化本质是统一编码, 统一解码的方式. 本文探讨是一种简单的序列化方案. 保证不同使用端都能解析出正确结果. 在文章一开始, ...
- ASP.NET基础笔记
MSDN: ...
- 模糊查询&&日期时间操作
一.模糊查询 1.采用“_”.“%”通配符进行查询 select * from Students where stu_name like '张_';--一个‘_’表示一个字符 select * fro ...
- React Native分析(index.ios.js)
定义创建组件MyComponent(index.ios.js): 'use strict' var React = require('react-native'); var { AppRegistry ...
- poj 1459 Power Network
题目连接 http://poj.org/problem?id=1459 Power Network Description A power network consists of nodes (pow ...
- NFC应用实例
package com.example.mynfcdemon; import android.app.Activity;import android.nfc.NfcAdapter;import and ...
- QT 的信号与槽
转载: QT 的信号与槽机制介绍 QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 ...