【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 2436|回复: 0

[脚本] 在Unity3d的Json里传中文的方法

[复制链接]
发表于 2014-3-17 16:59:37 | 显示全部楼层 |阅读模式
那个例子有个问题就是,如果你传过来的数据带中文,到了u3d里,执行到
  var jsonObj1=eval(getwww.data);
这一步的时候就会出错。原因是unity3d不支持\u转义,而json_encode函数在encode的时候就直接把中文变成了\u1234这种形式。

其实很好解决,echo之前先把转义的字符串变成中文就行了。unity3d不是浏览器,应该调用WWW的时候直接读的二进制数据,所以不会出错。




附图里面的“测试”两个字就是json直接传的。

js_unescape这个函数是我抄来的……简单改了改

php代码:
[mw_shl_code=php,true]<?php
$arr=array(
      'username' => '测试',
      'password' => 'bar'
);
echo  js_unescape(json_encode($arr));
function js_unescape($str)
{
        $ret = '';
        $len = strlen($str);
        for ($i = 0; $i < $len; $i++)
        {
                if ($str[$i] == '\\' && $str[$i+1] == 'u')
                {
                        $val = hexdec(substr($str, $i+2, 4));
                        if ($val < 0x7f) $ret .= chr($val);
                        else if($val < 0x800) $ret .= chr(0xc0|($val>>6)).chr(0x80|($val&0x3f));
                        else $ret .= chr(0xe0|($val>>12)).chr(0x80|(($val>>6)&0x3f)).chr(0x80|($val&0x3f));
                        $i += 5;
                }
                else $ret .= $str[$i];
        }
        return $ret;
}
?>[/mw_shl_code]u3d js代码:
[mw_shl_code=javascript,true]var jsonURL="http://localhost/json/demo.php";
var show;
var chineseSkin : GUISkin;
function Start(){
//获取json数据的方法
  var getwww : WWW = new WWW (jsonURL);
  yield getwww;
  print (getwww.data);
  var jsonObj1=eval(getwww.data);
  print (jsonObj1["username"]);
show=jsonObj1["username"];
}
function OnGUI(){
          GUI.skin=chineseSkin;
          GUI.Button(Rect(10,10,100,20),show);
}[/mw_shl_code]需要字体才能显示出中文。另外注意.php文件的编码要设置成utf-8,u3d的js文件编码最好也设置成utf8。
=====
另外,上面链接的那个使用json的方法,对于树形结构同样有效:
比如改成[mw_shl_code=php,true]$arr=array(
      'username' => '你好',
      'password' => 'bar',
     'a' => array(
              "name" => "aaa",
              "pass" => "bbb"
      )
);[/mw_shl_code][mw_shl_code=csharp,true]print (jsonObj1["a"]["name"]);[/mw_shl_code]
例如数据库查询结果,3条记录,每条记录里面包含姓名,性别,年龄。这个json也能取得后返回u3d吗?


是完全可以的,忘了xml吧。不过从u3d传到web上目前我那个代码没实现json树形结构,只能传递1层的,改改应该也可以实现。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2024-5-14 12:34

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表