原地址:http://www.cnblogs.com/petto/p/3915943.html

一些废话

原文地址:

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一个字符串吧。完整代码如下。

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相互通信(插件方式)的更多相关文章

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

    源地址:http://www.cnblogs.com/petto/p/3909063.html 一些废话 昨天写一篇今天写一篇.不是我闲的蛋疼,是今天一天碰到了好几个恼人的问题,浪费一天时间搞定.本文 ...

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

    我之前用了两篇文章写了WP与Unity相互通信.调用的办法,一个是事件,一个是插件. 这次来说个更简单的,我觉得这应该是Unity发布到WP或者Win Store上得天独厚的优势.毕竟都是C#. 懒得 ...

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

    Windows GUI代码与Windows消息问题调试利器 记得很久前有这么一种说法: 人类区别于动物的标准就是工具的使用.同样在软件开发这个行业里面,对于工具的使用也是高手和入门级选手的主要区别,高 ...

  4. 利用Python编写Windows恶意代码!自娱自乐!勿用于非法用途!

    本文主要展示的是通过使用python和PyInstaller来构建恶意软件的一些poc. 利用Python编写Windows恶意代码!自娱自乐!勿用于非法用途!众所周知的,恶意软件如果影响到了他人的生 ...

  5. 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 ...

  6. Windows数字代码签名的作用和流程

    什么是数字代码签名?数字签名代码是一种技术,它使用数字证书来识别软件的发布商和使用hash算法来确保软件的完整性.数字签名使用公共密匙签名书法被创建,它使用两种不同的密匙:公共密匙和私有密匙,我们称其 ...

  7. 记录一个Unity播放器插件的开发

    背景 公司最近在做VR直播平台,VR开发我们用到了Unity,而在Unity中播放视频就需要一款视频插件,我们调研了几个视频插件,记录两个,如下: Unity视频插件调研 网上搜了搜,最流行的有以下两 ...

  8. windows 下实现函数打桩:拦截API方式

    windows 下实现函数打桩:拦截API方式            近期由于工作须要,開始研究函数打桩的方法. 由于不想对project做过多的改动,于是放弃了使用Google gmock的想法. ...

  9. Unity的NGUI插件篇——入场效果

    Unity的NGUI插件篇--入场效果 入场效果 入场效果须要借助于NGUI提供的TweenPosition类来完毕.为了说明此类的用法.本节将使会解说两个演示样例.本文选自  大学霸 <NGU ...

随机推荐

  1. 16.python中的浅拷贝和深拷贝

    在讲什么是深浅拷贝之前,我们先来看这样一个现象: a = ['scolia', 123, [], ] b = a[:] b[2].append(666) print a print b

  2. Python脚本控制的WebDriver 常用操作 <十> 层级定位

    下面将使用WebDriver来模拟操作一个层级定位元素的操作 测试用例场景 在实际的项目测试中,经常会有这样的需求:页面上有很多个属性基本相同的元素,现在需要具体定位到其中的一个.由于属性基本相当,所 ...

  3. Python生成器以及yield语句

    生成器是一种暂缓求值的技术,它可以用来生成一系列的值,但不会一次性生成所有的值,而只在需要的时候才计算和生成一个值. 通过yield语句构建生成器 要得到一个生成器,我们需要定义一个函数,这个函数返回 ...

  4. Python判断是否是数字(无法判断浮点数)(已解决)

    s为字符串s.isalnum() 所有字符都是数字或者字母s.isalpha() 所有字符都是字母s.isdigit() 所有字符都是数字s.islower() 所有字符都是小写s.isupper() ...

  5. ping通IP,telnet 3306不通

    一个同事装的MySQL数据库,无法连接.​​1.查看权限​​2.查看防火墙​​检查用户权限,防火墙都没问题,就是无法连接,能ping通,但是telnet 3306 端口无法成功.​​检查了下数据库配置 ...

  6. linux中fork()函数详解

    一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同, ...

  7. job不自动运行解决方法

    一.plsql.新建命令窗口 用查询语句: show parameter job_queue_processes 看看job_queue_processes的值 如果你的job很多那么将这个值设大,5 ...

  8. ubuntu server获取并自动设置最快镜像的方法

    一,安装方法1 add-apt-repository ppa:ossug-hychen/getfastmirrorapt-get install getfastmirror 如果添加了临时源,这样移除 ...

  9. Learning note for Binding and validation

    Summary of my learning note for WPF Binding Binding to DataSet. when we want to add new record, we s ...

  10. java中直接打印对象

    java中直接打印对象,会调用对象.toString()方法.如果没有重写toString()方法会输出"类名+@+hasCode"值,hasCode是一个十六进制数 //没有重写 ...