王星
论坛版主
论坛版主
  • UID547
  • 粉丝0
  • 关注0
  • 发帖数1
阅读:5606回复:0

三维场景使用网页作为UI方法

楼主#
更多 发布于:2019-03-29 09:53
UIUser Interface,用户介面。在三维程序开发中将非三维模型部分的按钮、图表等特称为UI。在三维程序中使用网页作为UI分为两张情况:网页嵌入三维程序中、三维程序嵌入网页中。
一、网页嵌入三维场景
这种情况一般是三维程序最终发布为exe可执行程序,在三维程序中嵌入内置浏览器工具以解析网页内容。基于Embedded Browser(V2.1.0)插件,使用Chromium 64.0.3282.119 / CEF
3.3282.1741.gcd94615为浏览器内核。
Embedded Browser可以把网页将网页渲染为纹理并与其完全交互。支持编写HTML,CSS和JavaScript直接呈现网页;支持从Unity调用JavaScript;支持从JavaScript调用Unity;支持网页控制:网址加载,后退,重新加载,调整大小等浏览器功能;支持透明或不透明的页面背景切换;包含Mipmap仿真着色器可以更快的更新纹理,无闪烁。
数据交互示例:
三维场景到网页-三维场景端:在Canvas下创建物体,挂载RawImage组件和Browser.cs脚本。物体命名为BrowserTransfrom代码示例(c#):
public void ChangeDocNum(string num)
{
   //网页js包含changeValue(num)方法函数

  
 BrowserTransfrom.GetComponent<Browser>().EvalJS("changeValue("
+ num + ")");
}
三维场景到网页-网页端(js):
function changeValue(){
//触发事件
}
网页到三维场景-三维场景端:在内置浏览器中注册一个方法并添加触发事件,网页上执行该功能函数时便可以同时触发三维场景中的注册事件了。代码示例(c#):
//网页js包含LoadDataInScene
(json)方法函数
BrowserTransform.Component<Browser>().RegisterFunction("LoadDataInScene",
args => {          

 string Jsondata = args[0];
 
Debug.Log("Get Json Frm html: " + Jsondata);
}
网页到三维场景-网页端:在网页JS上预写一个可传入参数的功能函数即可。代码示例(js):
function
LoadDataInScene(arg){}
ps:发布不可使用中文程序名称。
二、三维场景嵌入网页中
三维场景发布为WebGL,可以通过网页加载三维内容。嵌入三维场景可与其外部网页进行数据交互。
数据交互示例:
三维场景中可直接调用外部网页js代码(c#):
       
Application.ExternalCall(“JSCode”);
外部网页也可调用场景中的功能方法(js):
       
gameInstance.SendMessage("ObjectName", "FunctionName",
Arg);
ObjectName是三维场景中挂载脚本的物体名称
FunctionName是三维场景中物体包含的公用属性方法;
Arg是方法参数。

游客

返回顶部