• unity3D与网页的交互


    由于项目需要,要求用unity来展示三维场景,并在三维中能够方便的查询数据库等。一开始尝试在unity中直接连接数据库,当时连的xml,然而每次发布成网页后都会出现路径找不到等问题,所以迫不得已采用了unity向网页传送数据,网页中处理数据(查询数据库),然后将处理过的数据再反传送给unity,最终在unity中将其展示(在网页中展示更为灵活)。

    原理很简单:

    1、unity向网页发送数据的函数:Application.ExternalCall("SayHello",gameObject.name),这个函数将调用网页中的SayHello函数,gameObject.name为传递的参数。

    2、网页向unity发送数据的函数:网页中用GetUnity().SendMessage(message, "AcceptName",buildingname)函数来调用unity中的函数,此函数的参数message为unity中的物体,AcceptName为物体上的函数,buildingname为传递的参数。

    网页中的函数如下:

     1functionSayHello(message){//此函数来接收unity中发送出来的message值,并将处理后的数据再发送回unity
     2jQuery.post('../Unity/javascript/DBhelper.ashx',{id:message}, function(data)
     3        {
     4varmsg=JSON.parse(data);//json数据解析
     5varbuildingname = msg[0].Building_name;
     6varbuildingcategory=msg[0].Building_category;
     7varbuildingpic = msg[0].Building_pic;
     8GetUnity().SendMessage(message, "AcceptName",buildingname);//unity中的message物体上的MyFunction函数发送buildingname
     9GetUnity().SendMessage(message,"AcceptCategory", buildingcategory);
    10
    11GetUnity().SendMessage(message,"AcceptImg", buildingpic);
    12       });   
    13}

    此函数将unity中发送的数据message传到DBhelper.ashx中,在DBhelper.ashx中将传递过来的数据进行查询等操作,然后再用GetUnity().SendMessage(message,"AcceptName", buildingname)将处理好的数据buildingname传给unity中的AcceptName函数。

    以下是unity中的脚本,可以实现中文,关于中文的实现由于文章有限,在此不再说明,只说明怎样接收网页中的数据。

     1varchineseSkin : GUISkin;//在此可以选择字体,并设置为中文。建议编辑器设为uft-8
     2
     3varbuildingname:String;//用来接收从网页中传递过来的buildingname
     4varbuildingcategory:String;//用来接收从网页中传递过来的buildingcategory
     5
     6var buildingpic:Texture2D;//用来接收从网页中传递过来的buildingpic
     7var windowRect0 = Rect (20, 20, 250, 200);
     8varenable:boolean;
     9function Awake(){
    10enable = false ;
    11}

    //鼠标按下去时触发的事件
    12functionOnMouseDown () {
    13Application.ExternalCall("SayHello",gameObject.name);// 向网页中的SayHello函数发送gameObject.name数据
    14enable = true;
    15}
    16functionAcceptName(bdname){//用于接收网页中发送回来的数据
    17buildingname=bdname;
    18}
    19functionAcceptCategory(buildingType){//用于接收网页中发送回来的数据
    20buildingcategory=buildingType;
    21}
    22
    23functionAcceptImg(img){

    //读取文件夹下的图片文件
    24var www :WWW = newWWW("http://localhost:1166/Unity/images/"+img+"");
    25yield www;

    //为buildingpic设置纹理
    26buildingpic=www.texture;
    27}

    //绘制GUI元素时触发的事件
    28functionOnGUI(){
    29GUI.skin=chineseSkin;
    30if(enable)
    31{

    //绘制一个窗体,记住第三个参数是方法名字
    32windowRect0 = GUI.Window (0, windowRect0,DoMyWindow, "属性");
    33}
    34}

    //绘制一个窗体,windID是不可缺少的元素,指向窗体的索引值
    35functionDoMyWindow (windowID : int) {
    36GUI.Label(Rect(10,50,80,30),"建筑物名字");
    37GUI.TextField(Rect(100,50,100,30),buildingname);
    38GUI.Label(Rect(10,100,80,30),"建筑物类型");
    39GUI.TextField(Rect(100,100,100,30),buildingcategory);
    40
    41GUI.DrawTexture(Rect(10,150,200,50),buildingpic,ScaleMode.ScaleToFit,true,0);
    42if(GUI.Button(Rect(190,20,50,30),"退出")){
    43enable = false;
    44}
    45GUI.DragWindow (Rect (0,0,10000,10000));
    46}

    //鼠标在上面时触发
    47functionOnMouseOver(){
    48transform.Rotate(0,Time.deltaTime*100,0,Space.World);
    49}

    //鼠标进入时触发
    50functionOnMouseEnter(){
    51renderer.material.color = Color.blue;
    52}

    //鼠标离开时触发
    53functionOnMouseExit(){
    54renderer.material.color =Color.yellow;   
    55}

    这是unity中的脚本,此脚本实现点击物体,弹出物体的属性。

  • 相关阅读:
    关于VFP9.0备注字段(memo)插入编辑问题
    asp.net core EF数据库生成模型
    asp.net Core Autofac IOC 属性注入
    CSS完美实现iframe高度自适应(支持跨域)
    改良版的SQL Service 通用存储过程分页
    Sql Service存储过程分页
    C#Excel导出导入
    C#文件压缩
    DataTable转换实体类
    C#Base64加密
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3228658.html
Copyright © 2020-2023  润新知