定义一个帮助类 实际上就是为了设置下面这两种属性 安全性信任和从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.设置右键屏蔽和切换加载图标没找着怎么设置 希望以后有答案的朋友给我留言 先凑合着完成项目再说。
wpf集成unity
最新推荐文章于 2023-05-24 16:31:49 发布