如何实现Windows Phone代码与Unity相互通信
1个回答
展开全部
首先创建一个空白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!!!";是吧,是我们想要的结果吧。
然后确定,进入一个没有工程的空白解决方案。右键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!!!";是吧,是我们想要的结果吧。
微测检测5.10
2023-05-10 广告
2023-05-10 广告
您好!建议咨 深圳市微测检测有限公司,已建立起十余个专业实验室,企业通过微测检测就可以获得一站式的测试与认 证解决方案;(EMC、RF、MFi、BQB、QI、USB、安全、锂电池、快充、汽车电子EMC、汽车手机互 联、语音通话质量),认证遇...
点击进入详情页
本回答由微测检测5.10提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询