【问题标题】:In Unity3D's Web Player I can't access an XML file在 Unity3D 的网络播放器中,我无法访问 XML 文件
【发布时间】:2015-10-17 21:28:46
【问题描述】:

我用 Unity3D 制作了一个必须访问 XML 文件的游戏。我已将文件放在 Assets 文件夹中,当我在 Unity 中调试游戏时,它可以正常工作。问题是当我构建游戏并在浏览器(网络播放器)中启动它时它不起作用。它给出了以下错误:

MethodAccessException:尝试访问私有/受保护方法失败

是不是和网页播放器的安全限制有关?

【问题讨论】:

  • Assets 文件夹中的文件并不意味着它包含在您的构建中。你的意思是把它放在你的资源中吗?你能告诉我们相关的代码吗?
  • 其实我也试过把xml文件和可执行文件放在同一个文件夹下,但是还是不行。至于代码,我使用了 System.XML 中包含的类(XMLDocument、XMLNode、XMLNodeList,...)
  • 您如何访问文件的内容? WebPlayer 倾向于限制对文件系统的访问,这可能会造成问题。当反射调用尝试访问受保护的构造函数时,我还听说过一些罕见的错误。
  • 尝试在 Resources 文件夹中添加 XML 文件,并通过 Resources.Load 加载它。 Unity 将 Resources 文件夹中的所有内容都包含在您的构建中。由于它在构建“内部”,因此安全沙箱在尝试加载文件时不会抛出错误
  • @Venkat 你应该提供这个作为答案,因为它是在 Unity 中加载外部资源的正确方法,甚至可能在 webplayer 中也可以工作。

标签: xml unity3d unity-web-player


【解决方案1】:

在这里发表评论作为答案

  1. 将 XML 文件移动到 Resources 文件夹中。
  2. 使用Resources.Load 将文件加载为TextAsset
  3. 使用 TextAsset.text 抓取文本

快速示例

public class LoadAnXML : Monobehaviour {

    void Start () {
        var xmlText = Resources.Load<TextAsset>("MyXML").text;
        //Do stuff with the text here
    }
}

【讨论】:

    【解决方案2】:

    是的,Venkat 是对的,必须使用 Resources.Load。但就我而言,当我使用 C# 时,效果最好的代码是这样的:

    XmlDocument xmldocument = new XmlDocument ();
    xmldocument.LoadXml (Resources.Load<TextAsset> ("my_xml_file").text);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2020-12-02
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多