查看: 1524|回复: 1
打印 上一主题 下一主题

在Unity3D里使用JSON格式进行******交换

[复制链接]

2508

主题

2

听众

3万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
32806
精华
12

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2012-8-14 10:24:20 |只看该作者 |倒序浏览
JSON格式是ajax里面比较常用的一种******交换格式,比起xml来要方便,而且overhead很小。原来我做的web上的东西基本上******传输很少用XML,都是用的JSON。关于JSON格式的好处和基础知识,不清楚的可以google一下,这里不详细写了。总体来说好处就是JSON比XML小、快、容易读,解析方便。前两天写完那个javascript的贴子之后,就一直在琢磨,既然反正unity3d用的是Javascript,而且支持eval,为啥不用JSON,还要用XML来做******交换呢。google了一下,好像没有人提出过怎么在unity里使用json,国外就一个帖子还是想用但没解决的。 这个例子里做的事情很简单,主要做了两件事: 1 从服务器的php程序里读一个json******,然后把内容显示出来。 2 把一个******结构转换为JSON传给服务器。 所谓******交换,一来一回,这个例子都做了。 首先第一个,写一个最简单的php程序生成json******。 取名叫test.php <?php
$arr=array(
'username' => 'foo',
'password' => 'bar'
);
echo json_encode($arr);
?>复制代码这个程序就是把$arr这个数组变成json格式的******显示出来。php5以上都支持json_encode,如果是php4需要一个额外的支持程序,可以去json.org找。 第二个php程序是把从unity3d post过去的json******转成数组使用。取名叫test1.php,也很简单。 <?php
$jsonstring=$_POST["jsonstring"];
$jsondata=json_decode(stripslashes($jsonstring),***e);
echo $jsondata["password"];
?>复制代码在Unity里怎么用呢?也不难,下面是代码,随便取个什么名字都行。我取名叫jsontest.js。 var jsonURL="http://localhost/json/test.php"; var jsonURL1="http://localhost/json/test1.php"; function Start(){ //获取json******的方法 var getwww : WWW = new WWW (jsonURL); yield getwww; var jsonObj1=eval(getwww.data); print (jsonObj1["username"]); //提交JSON******的方法 var mydata=new Boo.Lang.Hash(); mydata["username"]="hello"; mydata["password"]="world"; //将******转换为json字符串 var jsonstring=ToJSON(mydata); var form = new WWWForm(); form.AddField("jsonstring", jsonstring); var postwww: WWW = new WWW(jsonURL1, form); yield postwww; print(postwww.data); } /** * 转换JSON */ static function ToJSON(obj){ if (obj==null) return "null"; var results=new Array(); for (var property in obj){ results.push("""+property.Key+"" : ""+property.Value+"""); } return "{"+results.join(" , ")+"}"; } 复制代码在Start()里,直接用eval把json转成boo.lang.hash格式,取出username,看console的话可以看到显示出了foo,也就是php里面$arr['username']。接着再提交一个username和password,叫hello和world,然后把php获取的反馈显示出来,会看到console里显示了world。 ToJSON()函数是我写的一个简单函数,就是把Boo.lang.hash数组转成json字符串,只能处理一维数组,如果谁有兴趣可以改一下让它支持多维数组。 这样一来,原来我习惯的json******传输就可以用了,如果熟悉使用json格式的朋友会方便多了,原来习惯使用xml格式的朋友也推荐你研究下这种简单方便的格式,会提高一些程序效率。 呃,论坛在safari下不能用discuz代码模式…code标签只能换用firefox编辑下了……另外tojson那个函数之所以没支持多维数组,主要是不知道在原来ecma的javascript里的undefined这个东西在unity3d里怎么表示… 还是不设置回复可见,大家有人的捧个人场,有花的捧个花场,有分的捧个分场……=。=||
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

2317

主题

54

听众

2万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
20645
精华
62

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2012-12-30 04:22:12 |只看该作者
学习了,虽然还是有难度,谢谢楼主的用心
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2025-7-21 23:48 , Processed in 0.063970 second(s), 28 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部