您的位置:首页 > 移动开发 > Unity3D

wpf集成unity

2015-08-13 14:33 579 查看
定义一个帮助类 实际上就是为了设置以下这两种属性 安全性信任和从html中可见的属性

即: 在html的javaScript中可用 window.external.方法名来调用C#方法

[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]

[ComVisible(true)]

public class ObjectForScriptingHelper

{

MainWindow mExternalWPF;

public ObjectForScriptingHelper(MainWindow w)

{

this.mExternalWPF = w;

}

//自己写的方法 显示返回的文字

public void ChangeText(string message)

{

this.mExternalWPF.button1.Content = message;

}

}

//WPF window 窗口

public partial class MainWindow : Window

{

public MainWindow()

{

InitializeComponent();

//这里定义帮助类 參数是当前window

ObjectForScriptingHelper helper = new ObjectForScriptingHelper(this);

//这里定义页面脚本可调用的类对象

webBrowser1.ObjectForScripting = helper;

}

private void Window_Loaded(object sender, RoutedEventArgs e)

{//载入时候给个链接 链接到unity3d控件

webBrowser1.Navigate(new Uri(@"N:\Communications\bin\Debug\WebPlayer.html", UriKind.RelativeOrAbsolute));

}

}

-----------------------------------下面是网页内方法------------------------------------------

<script type="text/javascript">

//这个是给u3d控件调用的方法

function ShowTestMessage(message) {

window.external.ChangeText(message);

}

//这个是外面调用u3d控件的方法

function ChangeMode() {

//要传递的參数 这里假设要传递大量參数 我是用XML格式传送的 把类型转换成string 类型的 xml格式 然后u3d内部再转回来直接面向对象操作。

var mode = 0;

( 依据id得到)控件.SendMessage("脚本所在物体名称 PS:能够无论物体所在层次", "要调用的方法名", mode);

}

</script>

unity3d中调用外界方法就不说明了 是用Application.ExternalCall 不会的去查u3d手冊

wpf后台调用u3d中方法 就是在wpf中调用 页面中js脚本 然后 得到u3d控件.SendMessage 即可

最初做这个交互的初衷是想做个本地项目 可从指定路径获得新模型样板 然后通过载入数据库数据 载入场景、模型 和保存。

之所以用webbroswer数据加载中实现互动,而不是u3d的winform activex控制 到期 对照后去实现它遇到的几个问题 1.路径来动态地设置这样做 2.设置正确的屏蔽,并没有发现如何切换加载图标集 希望能有答案的朋友给我发短信 凑合完成的项目说。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: