[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,如需转载请自行联系原作者
相关文章
|
图形学 Windows
Unity报错之 No Sprite Editor Window registered. Please download 2D Sprite package from Package Manager
Unity2019操作对图集进行操作编辑出错:No Sprite Editor Window registered. Please download 2D Sprite package from Package Manager.
1054 0
Unity报错之 No Sprite Editor Window registered. Please download 2D Sprite package from Package Manager
|
图形学
unity报错之Material doesn‘t have a texture property ‘_MainTex
Material doesn‘t have a texture property ‘_MainTex
unity报错之Material doesn‘t have a texture property ‘_MainTex
Unity报错:Read only asset Packages/com.xxxxx.xxx.xxxx/Editor/VSCodeDiscovery.cs.IPGSD has no meta
Unity报错:Read only asset Packages/com.xxxxx.xxx.xxxx/Editor/VSCodeDiscovery.cs.IPGSD has no meta
Unity报错:Read only asset Packages/com.xxxxx.xxx.xxxx/Editor/VSCodeDiscovery.cs.IPGSD has no meta
【Unity3D 问题总结】Unity报错提示:InvalidOperationException: Collection was modified; enumeration operation ma
在Unity中运行场景时报错,报错内容如下 原因是在foreach中不能修改处理的集合,Foreach体内运用了对Collection的Remove方法(或者Add方法)
【Unity3D 问题总结】Unity报错提示:InvalidOperationException: Collection was modified; enumeration operation ma
【Unity3D 问题总结】Unity报错提示:Asset database transaction committed twice
也找不到代码哪里出错了,新建查空场景运行也会报错,真是离了个大谱! 然后打开UnityHub发现原来是许可证过期了!!
【Unity3D 问题总结】Unity报错提示:Asset database transaction committed twice
|
定位技术 vr&ar 图形学
【Unity3D 灵巧小知识点】 ☀️ | Unity中几个简单又常见的报错异常
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。 也可以简单把 Unity 理解为一个游戏引擎,可以用来专业制作游戏!
【Unity3D 灵巧小知识点】 ☀️ | Unity中几个简单又常见的报错异常
|
网络安全 开发工具 图形学
使用SourceTree管理Unity工程推送报错 “ RPC failed; curl 55 Send failure: Connection was aborted“
使用SourceTree管理Unity工程推送报错 “ RPC failed; curl 55 Send failure: Connection was aborted“
1009 0
使用SourceTree管理Unity工程推送报错 “ RPC failed; curl 55 Send failure: Connection was aborted“
|
图形学
Unity 报错之 The type or namespace name 'UI' does not exist in the namespace 'UnityEngine'
关于Unity2017 升级到 Unity2019 两个问题。 The type or namespace name 'UI' does not exist in the namespace 'UnityEngine'
2564 0
Unity 报错之 The type or namespace name 'UI' does not exist in the namespace 'UnityEngine'
|
API vr&ar 开发工具
Unity报错 之 版本升级到2020对输入系统封装不好用了
Unity 版本升级到2020,Input Manager 输入系统升级带来的问题处理。
444 0
Unity报错 之 版本升级到2020对输入系统封装不好用了
|
图形学 C++ iOS开发
Unity 之 发布Mac报错il2cppcore.dll did not run propertly
Unity发布Mac 打包卡在Building native binary with IL2CPP,打包报错:Exception: /Applications/Unity/Hub/Editor/2019.4.13f1c1/Unity.app/Contents/il2cpp/build/deploy/il2cppcore/il2cppcore.dll did not run properly!
935 0
Unity 之 发布Mac报错il2cppcore.dll did not run propertly