Пример #1
0
        /// <summary>
        /// Loads An Asset Bundle For Using Data Such As Sprites
        /// </summary>
        /// <param name="resource">The Path To The Embedded Resource File - Example: VRCAntiCrash.Resources.plaguelogo.asset</param>
        /// <returns>True If Successful</returns>
        internal bool LoadBundle(string resource)
        {
            if (HasLoadedABundle)
            {
                return(true);
            }

            try
            {
                if (string.IsNullOrEmpty(resource))
                {
                    error = "Null Or Empty Resource String!";
                    return(false);
                }

                var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource);

                if (stream != null && stream.Length > 0)
                {
                    var memStream = new MemoryStream((int)stream.Length);

                    stream.CopyTo(memStream);

                    if (memStream != null && memStream.Length > 0)
                    {
                        var assetBundle = AssetBundle.LoadFromMemory(memStream.ToArray());

                        if (assetBundle != null)
                        {
                            assetBundle.hideFlags |= HideFlags.DontUnloadUnusedAsset;

                            bundle = assetBundle;

                            HasLoadedABundle = true;

                            return(true);
                        }

                        assetBundle = AssetBundle.GetAllLoadedAssetBundles_Native().First(o => o.GetAllAssetNames().Any(p => p.ToLower().Contains("plague")));

                        assetBundle.hideFlags |= HideFlags.DontUnloadUnusedAsset;

                        bundle = assetBundle;

                        HasLoadedABundle = true;

                        return(true);
                    }

                    error = "Null memStream!";
                }
                else
                {
                    error = "Null Stream!";
                }

                return(false);
            }
            catch (Exception ex)
            {
                error = ex.ToString();
                return(false);
            }
        }