如何实现Windows Phone代码与Unity相互通信(插件方式)

一些废话

原文地址:

http://imwper.com/unity/petto/%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0windows-phone%E4%BB%A3%E7%A0%81%E4%B8%8Eunity%E7%9B%B8%E4%BA%92%E9%80%9A%E4%BF%A1%EF%BC%88%E6%8F%92%E4%BB%B6%E6%96%B9%E5%BC%8F%EF%BC%89.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一个字符串吧。完整代码如下。

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的类中的代码:

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进行编辑。代码如下:

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相互通信(插件方式),布布扣,bubuko.com

时间: 2024-08-26 01:03:03

如何实现Windows Phone代码与Unity相互通信(插件方式)的相关文章

如何实现Windows Phone代码与Unity相互通信(事件方式)

一些废话 昨天写一篇今天写一篇.不是我闲的蛋疼,是今天一天碰到了好几个恼人的问题,浪费一天时间搞定.本文将是一篇比较有用的文章,当然前提是你要开发Unity游戏并发布到WP上.好了.不废话了.进入正文. 实现Windows Phone代码与Unity相互通信或者调用,一般来讲有两种办法,一种是在Unity中定义事件,在wp代码中对其进行注册,然后在unity中某些情况下触发该事件,在wp代码中执行注册该事件的方法: 另外一种是插件方式,即在wp中编写dll插件,放在unity的Assets/Pl

如何实现Windows Phone代码与Unity相互通信(直接调用)

我之前用了两篇文章写了WP与Unity相互通信.调用的办法,一个是事件,一个是插件. 这次来说个更简单的,我觉得这应该是Unity发布到WP或者Win Store上得天独厚的优势.毕竟都是C#. 懒得写的那么详细了. 具体就是在Unity里边定义了个Public的静态方法,在WP中直接就可以调用了,呵呵,就这样. 具体情况一般在保存数据的时候. 因为WP中的退出有可能是在多任务管理的时候,直接向下滑动,这样的退出是不会触发Unity的OnApplicationQuit的.如果你在这个事件里写了保

Windows Azure之不同订阅的相互通信

对于Windows Azure 订阅,不仅仅是商业上计费的方法,同时是一个独立的资源池订阅.不同订阅之间是不能相互访问的,所以今天就简单的如何配置windows Azure 不同订阅的相互通信.我这个方法其实就是Site2Site的做法. 本次环境:同个Azure账号不同订阅ID 本次环境的拓扑图: 1.我在demo账号创建两个不同的订阅,并创建虚拟网络: 先创建Vnet01,并配置的虚拟网络段为192.168.1.0/24 创建Vnet02,并配置虚拟网络段为192.168.2.0/24; 2

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-store/ In Part II we covered how you can publish your game to Windows Store, so it runs on Windows 8 driven devices. Today we are going to export our ga

windows备份与还原和两个主机的相互通信

DAY02Windows 实验一: 实验名称:windows系统的备份与还原 实验描述:为了保证系统的安全对系统做备份与还原操作系统 实验拓扑: 实验步骤: 步骤一:将急救大师软件安装在虚拟机的系统上-修改盘符-重启系统 步骤二:在选择系统时选择超级急救盘-进入选择Ghost32 for WINPE进入系统-点击ghost32-点击load-点击partition-点击to Image-点击OK-选择需要备份的系统盘符点击ok-选择备份的保存路径-点击Fast进行压缩 步骤三:对原来的系统进行操

Windows GUI代码与Windows消息问题调试利器

Windows GUI代码与Windows消息问题调试利器 记得很久前有这么一种说法: 人类区别于动物的标准就是工具的使用.同样在软件开发这个行业里面,对于工具的使用也是高手和入门级选手的主要区别,高手往往靠工具的使用在关键的时候打开局面,在适当的时候使用适当的工具就往往可以事半功倍. 首先让我们来讨论如下两个简单的问题. 1. 如果你写的一个软件出了一个问题,这个问题只有在关闭程序的时候出现,你怎么调试呢?2. 如果你写的一个软件出了一个问题,这个问题只有在关闭机器的时候出现,你怎么调试呢?3

Windows写代码,Linux运行 (WSL & VS Code)

在工作中,很多时候都是用Linux服务器,经常是一个PuTTY或是Git Bash连上去,要写一些Shell, Python,Perl, Groovy等脚本,通常也是用vi / vim / emacs / nano等常用编辑器,这些都很好用,也习惯了.有时候,当自己想要学点东西,想要配个Linux的环境,一般都是装个虚拟机(如VirtualBox),然后安装一个Ubuntu或CentOS. 现在, Windows 10(windows subsystem for linux)可以支持Linux了

[译]为Unity制作WP8插件

前言: 在用Unity发布WP8应用时候,经常会遇到一些API不能用的情况,例如弹出MessageBox,无法使用string.Compare(string,string,bool)等等之类的问题.那么如何解决这些问题呢?解决方案之一就是制作插件.在Unity Manual中有这样一篇文章:http://docs.unity3d.com/Manual/wp8-plugins-guide-csharp.html 讲的就是如何制作Unity的WP8插件.小弟我用中文将这个过程描述一遍.由于能力有限,

宿主机与虚拟机的相互通信

宿主机与虚拟机的相互通信                                       刘陈琪 第一步:在宿主机中设置IP地址. 1:找到控制面板,点击打开 2选择网络和Internet,点击打开. 3找到更改适配器设置,点击打开. 4找到网络和共享中心,点击打开. 5找到VMnet1,点击打开. 6找到属性,点击打开. 7选择版本4,点击属性确定. 8设置宿主机的IP地址,点击确定. 第二步:在虚拟机中设置IP地址. 9在虚拟机中找到控制面板,点击打开网络和Internet,点击