[Unity3d]SecurityException报错解决办法

简介:

最近被一个问题困扰了好久,连续三天都一直在想办法解决,各种能参考的资料都看了,包括硬着头皮看全英文的官网,努力寻求解决办法,昨晚搞到凌晨深夜两点可还是失望的离开了办公室,到底是什么问题呢?我相信如果Unity3D做网络游戏或者动态加载资源的同志们都会碰到,那就是Unity3d动态加载资源然后切换到web平台会报错,关于security的一个错误,官方的解释是:http://docs.unity3d.com/Documentation/Manual/SecuritySandbox.html,努力看看英文吧,相信会有帮助!


目的:为了Unity3D能动态加载模型资源,切换到web平台也能正常加载到场景中!

步骤:

一开始我做的方案一,就是Unity3D直接访问远程mysql数据库,但后来发现切换到web平台会报错,而且解决起来比较麻烦,也不知道是否有人解决了没,然后咨询有过网游开发经验的大牛,他说一般公司开发都是会搭建一个中间层服务器,php或者.net或者其他,通过这个中间层服务器来访问数据库并且返回打包的数据,因此就听了大牛的建议然后果断去搭建.net服务器,这个我还比较熟悉一些,之前搞过一年多的.net,然后中间层服务器搭建好了,url是http://192.168.1.6/plusFile/Test.aspx,Unity3D中通过www的方法获取aspx返回的数据库中模型的路径,关于模型我是放在额外自己新建的一个ftp服务器上,地址是http://114.92.247.6/xiaowei,上面有一个模型,当然我已经打包成unity3d格式的了,按理的话应该是动态加载fbx的的模型资源,但是这个还有待探索中,如果有知道的同志,还望指导我一下。关于.net服务器的搭建就不多说了,当然也可以用php或者jsp。

Unity3D代码:

using UnityEngine; using System.Collections; using System.Text;  public class NewBehaviourScript : MonoBehaviour {      string s;     private GameObject obj;     private WWW www;     private string url = @"http://192.168.1.6/plusFile/Test.aspx";     private string url1 = "http://114.92.247.6/xiaowei/ok.unity3d";      void Start()     {      }      void OnGUI()     {         if (GUI.Button(new Rect(20, 20, 100, 40), "加载"))         {             StartCoroutine(getURL(url));             print("2");         }     }      IEnumerator getURL(string url)     {         print("3");         WWW web = new WWW(url);         yield return web; 		         Encoding e1 = new ASCIIEncoding();         this.s = e1.GetString(web.bytes);         print("web : " + this.s);         print("--"+web.bytes.Length);          		//截取服务器端有用的数据 		print("s:length"+s.Length+"url1:length:"+url1.Length);         //this.s = web.text; 		this.s = s.Substring(0,38); 		print(s.Length);         StartCoroutine(getModel(s));         print(url1+"|"+this.s);         print(this.s.Length);     }       IEnumerator getModel(string str)     {         print(str.Length);         this.www = new WWW(str);          yield return this.www;         print(www.bytes.Length);         obj = GameObject.Instantiate(www.assetBundle.mainAsset) as GameObject;         obj.transform.position = new Vector3(0, 1, 20);         print(www.bytes.Length);     } }

效果图:



看到这我就有点欣喜了,能够动态加载模型了,但切换到web平台就有问题了,不管怎样就是报错,有关一个Security权限的错误,然后网上查看各种资料,了解到Web Player平台有一个Security SandBox的安全策略,这个可能是为了安全性考虑的吧,配置了一下用户访问资源的一个权限。也就是要在服务器端配置一个crossdomain.xml,大体内容是:
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">   <cross-domain-policy> <allow-access-from domain="*" to-ports="*"/> </cross-domain-policy>

第一个“*”是指权限内的IP,*代表所有IP的客户端都有这个权限,第二个*号指服务器放开所有的端口,主要是一个843端口,通过这个端口来监视客户端的活动的。但之前我怎么配置.net服务器端都发现还是security权限报错,搞了我昨晚凌晨两点才离开办公室,后来发现我的模型资源放在远程的FTP服务器端,那个服务器端也要配置相同的权限,这样一来就没有错误了,恭喜一下自己,终于解决了困惑已久的问题!


关于Unity3D,我们有个专门技术讨论的大群,可以进行技术交流和咨询,群号:858550 欢迎进行技术讨论,里面有不少大牛















本文转蓬莱仙羽51CTO博客,原文链接:http://blog.51cto.com/dingxiaowei/1366242,如需转载请自行联系原作者
相关文章
|
2月前
|
缓存 算法 开发者
【Conan 入门问题】Conan 删除本地缓存后的解决方法
【Conan 入门问题】Conan 删除本地缓存后的解决方法
131 0
|
2月前
|
C++
codeAction提供代码错误解决方案重要笔记
codeAction提供代码错误解决方案重要笔记
146 0
|
9月前
|
Java Spring
【Java异常】idea 报错:无效的目标发行版:17 的解决办法
【Java异常】idea 报错:无效的目标发行版:17 的解决办法
1046 0
|
Ubuntu 虚拟化
Ubuntu系统 安装与配置 常见异常与解决办法
解决办法:以管理员方式打开cmd命令,输入netsh winsock reset(这个命令是重置网络规范,黑屏的原因很可能就是VMware软件跟本地网络规范有冲突),回车之后提示成功重置winsock目录,您必须重新启动计算机才能重新完成配置。重启后打开即可。
Ubuntu系统 安装与配置 常见异常与解决办法
|
Kubernetes 网络协议 网络安全
K8S常见报错处理
作者主页:https://www.couragesteak.com/
K8S常见报错处理
Ubuntu系统 使用与开发 常见异常与解决办法
在开发过程中,不小心在终端中把当前用户的Desktop、Downloads、Music等文件夹删除。 解决措施:
|
缓存 Android开发
Android应用安装失败、解析失败
安卓手机安装软件是普通人都会做的事情,不过这也是有可能会出现问题的,比如安卓手机安装软件失败了,这要怎么解决。安卓手机安装软件失败是一些新手用户可能会遇到的问题,虽然有很多方面的原因,不过大体上分为软件和硬件2种情况,下面就整理一些解决方法,希望对有需要的用户有所帮助。
764 0
|
缓存 Java
电脑蓝屏重启后IDEA导包异常setup JDK
电脑正常开发过程中突然卡死不动(不是代码的问题,是电脑CPU处理器较老),操作鼠标键盘都无任何反应,一段时间后电脑蓝屏自动重启,重启后打开IDEA项目,结果发现所有的导包全部报红
电脑蓝屏重启后IDEA导包异常setup JDK
|
Java 程序员
IDEA 项目突然出现异常无法启动时的有效解决办法
解决方法有效的前提是,项目本身是可以正常启动的,但是因为某些原因无法正常启动,原因包括但不限于以下几种: 不小心删除了项目中的文件,导致无法启动 项目很久没更新,更新之后,导致无法启动 项目更新之后出现很多报错信息。
6082 0