//加载指定资源XML结构
    protected XmlStruct LoadResourceXMLByXmlStruct(XmlStruct xmlStruct, string structName)
    {
        xmlStruct = new XmlStruct();

        XmlResourceStruct resourceStruct = GetResourceXMLStructFromMainXML(XMLStaticString._resourceFile, structName);

        xmlStruct.xmlName        = resourceStruct.resName;
        xmlStruct.xmlPackageName = resourceStruct.resPackageName;
        xmlStruct.xmlPath        = resourceStruct.resPath;
        xmlStruct.xmlVersion     = resourceStruct.resVersion;

        if (string.IsNullOrEmpty(xmlStruct.xmlPath))
        {
            return(xmlStruct);
        }

        XmlDocument xml = LoadXml(xmlStruct.xmlPackageName + "/" + xmlStruct.xmlPath);

        XmlNodeStruct nodeStruct   = new XmlNodeStruct();
        XmlNode       resourceNode = xml.SelectSingleNode(XMLStaticString._resources);

        nodeStruct.xmlNodeName = XMLStaticString._resourceFile;
        //加载XML的节点
        nodeStruct.xmlNode = resourceNode.SelectSingleNode(nodeStruct.xmlNodeName);
        //加载"ResourceFile"节点下的所有资源
        nodeStruct = LoadResourcesByXMLNode(nodeStruct);
        xmlStruct.xmlNodeStruct = nodeStruct;

        return(xmlStruct);
    }
    //从主XML中获取资源XML的结构
    protected XmlResourceStruct GetResourceXMLStructFromMainXML(string nodeName, string structName)
    {
        XmlResourceStruct resourceStruct = new XmlResourceStruct();
        XmlNodeStruct     nodeStruct     = new XmlNodeStruct();

        if (m_mainXMLNodeStructList != null)
        {
            for (int i = 0; i < m_mainXMLNodeStructList.Count; i++)
            {
                if (nodeName.Equals(m_mainXMLNodeStructList[i].xmlNodeName))
                {
                    nodeStruct = m_mainXMLNodeStructList[i];
                    break;
                }
            }

            if (nodeStruct.xmlResourceStructArray != null)
            {
                for (int i = 0; i < nodeStruct.xmlResourceStructArray.Length; i++)
                {
                    if (structName.Equals(nodeStruct.xmlResourceStructArray[i].resName))
                    {
                        resourceStruct = nodeStruct.xmlResourceStructArray[i];
                        return(resourceStruct);
                    }
                }
            }
        }

        return(resourceStruct);
    }
    /// <summary>
    /// 获取克隆材质
    /// </summary>
    /// <param name="resName">资源名称</param>
    /// <returns>克隆材质球</returns>
    public Material GetCopyMaterialResourceByName(string resName)
    {
        XmlResourceStruct resStruct = GetNodeStructByXMLStruct(m_materialXML, "ResourceFile", resName);

        if (resStruct.resPath == null)
        {
            Debug.LogError("材质资源::" + resName + "获取失败");

            return(null);
        }
        Material material = new Material((Material)Resources.Load(resStruct.resPath));

        return(material);
    }
    /// <summary>
    /// 获取Json文本 Resources本地读取
    /// </summary>
    /// <param name="jsonName">json文件名</param>
    /// <returns></returns>
    public TextAsset GetJsonTextByName(string jsonName)
    {
        XmlResourceStruct resStruct = GetNodeStructByXMLStruct(m_jsonXML, "ResourceFile", jsonName);

        if (resStruct.resPath == null)
        {
            Debug.LogError("Json资源::" + jsonName + "获取失败");

            return(null);
        }

        TextAsset myJson = (TextAsset)Resources.Load(resStruct.resPath);

        return(myJson);
    }
    /// <summary>
    /// 获取动画
    /// </summary>
    /// <param name="resName">资源名称</param>
    /// <returns>动画控制器</returns>
    public RuntimeAnimatorController GetAnimatorResourceByName(string resName)
    {
        XmlResourceStruct resStruct = GetNodeStructByXMLStruct(m_animatorXML, "ResourceFile", resName);

        if (resStruct.resPath == null)
        {
            Debug.LogError("动画资源::" + resName + "获取失败");

            return(null);
        }

        RuntimeAnimatorController obj = Resources.Load <RuntimeAnimatorController>("New Animator Controller");

        return(obj);
    }
    /// <summary>
    /// 获取预制
    /// </summary>
    /// <param name="resName">资源名称</param>
    /// <returns>GameObject预制 未实例化</returns>
    public GameObject GetPrefabResourceByName(string resName)
    {
        XmlResourceStruct resStruct = GetNodeStructByXMLStruct(m_prefabXML, "ResourceFile", resName);

        if (resStruct.resPath == null)
        {
            Debug.LogError("预制资源::" + resName + "获取失败");

            return(null);
        }
        //Debug.Log(resStruct.resPath);
        GameObject obj = (GameObject)Resources.Load(resStruct.resPath);

        return(obj);
    }
    /// <summary>
    /// 获取精灵贴图数组
    /// </summary>
    /// <param name="resName">资源名称</param>
    /// <returns>Sprite贴图数组</returns>
    public Sprite[] GetSpriteArrayResourceByName(string resName)
    {
        XmlResourceStruct resStruct = GetNodeStructByXMLStruct(m_textureXML, "ResourceFile", resName);

        if (resStruct.resPath == null)
        {
            Debug.LogError("Sprite贴图数组资源::" + resName + "获取失败");

            return(null);
        }

        Sprite[] spriteArray = Resources.LoadAll <Sprite>(resStruct.resPath);

        return(spriteArray);
    }
    /// <summary>
    /// 获取贴图
    /// </summary>
    /// <param name="resName">资源名称</param>
    /// <returns>Texture贴图</returns>
    public Texture GetTextureResourceByName(string resName)
    {
        XmlResourceStruct resStruct = GetNodeStructByXMLStruct(m_textureXML, "ResourceFile", resName);

        if (resStruct.resPath == null)
        {
            Debug.LogError("Texture贴图资源::" + resName + "获取失败");

            return(null);
        }

        Texture texture = (Texture)Resources.Load(resStruct.resPath);

        return(texture);
    }
    /// <summary>
    /// 获取音频
    /// </summary>
    /// <param name="resName">资源名称</param>
    /// <returns>AudioClip音频</returns>
    public AudioClip GetAudioClipResourceByName(string resName)
    {
        XmlResourceStruct resStruct = GetNodeStructByXMLStruct(m_audioXML, "ResourceFile", resName);

        if (resStruct.resPath == null)
        {
            Debug.LogError("音频资源::" + resName + "获取失败");

            return(null);
        }

        AudioClip audio = (AudioClip)Resources.Load(resStruct.resPath);

        return(audio);
    }
    /// <summary>
    /// 获取指定名称的XML -- 配置在表中的Xml
    /// </summary>
    /// <param name="xmlName">XML文档名称</param>
    /// <returns>XmlDocument</returns>
    public XmlDocument GetXMLDocumentByName(string xmlName)
    {
        XmlResourceStruct resStruct = GetNodeStructByXMLStruct(m_xmlXML, "ResourceFile", xmlName);

        if (resStruct.resPath == null)
        {
            Debug.LogError("Xml资源::" + xmlName + "获取失败");

            return(null);
        }

        XmlDocument xml = LoadXml(resStruct.resPath);

        return(xml);
    }
    //从指定XML中获取指定的XML节点
    protected XmlResourceStruct GetNodeStructByXMLStruct(XmlStruct xml, string resParentNodeName, string resName)
    {
        XmlNodeStruct     parentNode = new XmlNodeStruct();
        XmlResourceStruct resStruct  = new XmlResourceStruct();

        parentNode = xml.xmlNodeStruct;

        for (int i = 0; i < parentNode.xmlResourceStructArray.Length; i++)
        {
            if (resName.Equals(parentNode.xmlResourceStructArray[i].resName))
            {
                resStruct = parentNode.xmlResourceStructArray[i];
                break;
            }
        }
        return(resStruct);
    }