近期热门
粉丝3
关注 1
获赞 0
详谈 Unity3D 利用 Webservice 读取数据库

[U3D] 详谈 Unity3D 利用 Webservice 读取数据库

 !heats_icon! [复制链接]
18328 6 0 2 12年前 举报
  申明:此教程是给像我这样菜鸟级别的同学看的,高手路过不要喷啊~ 发出来大家一起学习一下。我也是新手,有很多不明白的地方的话大家一起商讨555
相信大家从事Unity3D开发的,无论是做单机的还是做网游的,特别是稍微大点的项目,都会用到数据库,但是网络上关于Unity3D如何连接数据库的教程少之甚少,搜来搜去无非是那篇Unity3D如何连接mysql数据库,而且是一种直连的方法,即在Unity3D端直接连接数据库并对数据库进行操作。这样的方法有很多弊端,具体这里不说,而且我们也应该把这种直连的方法抛弃。
那么Unity3D如何连接数据库?用Webservice,Webservice通俗的讲就是可以让你调用其他网站的资源,比如网页显示的天气、地图当然也包括数据啦!Webservice只是一种服务,提供这个服务可以是Asp.NET,JAVA或者是PHP。以下就是Webservice的三层结构: 数据库(sql, oracle 等)----> web(asp.net.java.php)----->unity 3D
  从结构上看,Unity3D想要拿数据库的数据,问Web拿就可以了,而对数据库的操作已经外包给Web了,不用你操心。是的,理论上的东西看上去就是这么简单。Web对数据库的操作完全是没问题的,前提是大家如果会Asp.net,Java或者是PHP的话。但是问题是我Unity3D如何向Web拿数据?我当时就卡在了这步,好,再看一个细部结构,你便恍然大悟:
web(asp.net.java.php)-----xml.json--------> unity3D
是的,Unity3D不可以直接从Web中拿。必须要Web输出为XML或者JSON格式,这样Unity3D才可以成功读取数据。这里推荐大家用JSON格式,把XML忘记吧。因为JOSN更简洁更轻量。当然这部分不是你干的事,把这事交给Web(服务器端)的工作人员,告诉他们你要JOSN格式的数据就行!Unity3D读取JSON格式数据是非常Easy的!不过也不排除有些猛男,三层结构都是自己做的,如果你是菜鸟,想三层结构都自己操作,那么你还得有一个系统的学习~所以Web对数据库的操作,以及Web如何输出JSON格式我就不讲了。
  接下来,就讲一个实例,这个实例网上有,我只是把简单的事情复杂化,方面菜鸟吸收!
实例中用PHP,输出为JSON格式,因为讲起来简单些。结构如下:
                           数据库 -------php-------json------- unity3D
PHP对数据库的操作,我们略去,下面是步骤:

1.首先用记事本创建一个index.php的文件,里面写
<?php
$arr=array(          //一个数组,里面有name和sex两个元素
      'name' => 'Bill',  //你可以假设成 'name' => 'select name from table where name=“bill”
      'sex' => 'Male'
);
echo json_encode($arr);   //输出为JSON格式
?>
保存后将其挂到网上,我们可以用Apache或者VertrigoServ做PHP的服务器试验下。

接下来,我们要做的就是将数组的元素在Unity3D中显示出来

2.        在Unity3D中新建一个工程,新建一个JS脚本取名DB,里面写
var url = "http://192.168.1.102/";   //这里填你想要获取的地址或者你的本地地址啦
private var showname;         //定义两个变量来接受index.php中的数组的元素
private var showsex;
function Start () {
        var www : WWW = new WWW (url);   //这部分看www的API,你懂的
        yield www;
        print(www.text);  //可以看到从index.php传过来的是什么内容,便于理解
        var JsonData=eval(www.text);    //eval()是用来计算(解析)JSON的,很好用
        showname=JsonData["name"];   //将数组元素赋值给变量
        showsex=JsonData["sex"];       
}
function Update () {
}


function OnGUI () {
        // 创建一个文本字段,用户可以修改编辑。
        GUI.TextField (Rect (10, 10, 200, 20), showname, 25);  //定义两个TextField 来显示name和sex

        GUI.TextField (Rect (10, 50, 200, 20), showsex, 25);
}


OK,至此,运行,输出结果为:
可以看到,这个就是www.text的内容,eval()做的就是把数组元素在www.text中解析出来!

中文输出可以参考http://oulehui.blog.163.com/blog/static/79614698201123095952444/
数据的提交,可以用WWWfrom表单这个API,参考  
http://www.cocoachina.com/bbs/simple/?t9880.html

0
点赞
0
打赏
2
添加到收藏夹

0

点击复制链接

使用微信扫码分享
一次扣10个券
全部评论6
您需要登录后才可以回帖 登录

感谢up主,就是需要这样实用的技术帖

6年前
回复

使用道具 举报

支持,辛苦了
9年前
回复

使用道具 举报

有没有可下载的例子呢
10年前
回复

使用道具 举报

能发个包就好了

11年前
回复

使用道具 举报

CGJOY网友 
这个报错
11年前
回复

使用道具

好{:soso_e100:}
12年前
回复

使用道具 举报

您当前使用的浏览器IE内核版本过低会导致网站显示错误

请使用高速内核浏览器或其他浏览器