关于在移动平台读取unity资源目录文件的一些小问题

最近项目要上越南版本,然后需要接Facebook功能。其实在之前的各个地区的版本里面我的游戏都接过Facebook功能的。这次唯一的区别是越南那边的运营想在 Facebook里面直接显示游戏的名字是越南文的名字,而sdk是读取ios的product name作为显示的。游戏之前接的其他地区的product name都是使用英文的,于是感觉很简单,直接把xcode里面的product name改成了越南文的游戏名字。

结果发现游戏启动失败了,看看报错,是因为项目有个版本文件是放在StreamingAssets文件夹的,游戏启动的时候使用了WWW的方式去加载。然后把product name改成了越南文之后,在ios上面的StreamingAssets的路径会变成了/var/containers/Bundle/Application/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/user/越南文.app/Data/Raw/…这时候,直接使用StreamingAssets来做为WWW的url,会报unsupported url的错误。

看了一下这个错误,感觉是因为路径里面有utf-8的字符导致的,于是对路径做了一下urlencode,然后再WWW加载,就能正常读取了。c#里面有urlencode的方法:Uri.EscapeUriString(string str)

这个问题再延申一下,读取StreammingAssets路径,在pc 、mac、iOS上面其实都是可以直接用I/O的方式读取的,只有Android不行。这是因为Android的StreamingAssets文件夹是被打包在了apk的Assets里面,这个路径是只读的,而且不能用I/O的方式读取。当初我的项目就是为了方便,不想区分平台,才用了WWW的加载方式。

实际上同步读取Android上的StreammingAssets也是有很多方法的,比如AssetBundle.LoadFromFile就可以同步的读取StreamingAssets下面的AssetBundle文件。但这个方法只能读取AssetBundle,有一定的限制性。所以也可以通过jar或者aar的方式给项目写安卓的原始方法来读取,比如getResources().getAssets().open(filename)。

最后再做了一些尝试,发现只有WWW的url需要做urlencode,其他诸如AssetBundle.LoadFromFile系列的方法,是不需要urlencode直接传中文、越南文之类的路径都能读取的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值