Exemplo n.º 1
0
        private void LoadAssetsFile(string fullName, EndianBinaryStream stream)
        {
            var fileName = Path.GetFileName(fullName);

            if (!assetsFileListHash.Contains(fileName))
            {
                Logger.Info($"Loading {fileName}");
                try
                {
                    var assetsFile = new SerializedFile(this, fullName, stream);
                    assetsFileList.Add(assetsFile);
                    assetsFileListHash.Add(assetsFile.fileName);

                    foreach (var sharedFile in assetsFile.m_Externals)
                    {
                        var sharedFilePath = Path.Combine(Path.GetDirectoryName(fullName), sharedFile.fileName);
                        var sharedFileName = sharedFile.fileName;

                        if (!importFilesHash.Contains(sharedFileName))
                        {
                            if (!File.Exists(sharedFilePath))
                            {
                                var findFiles = Directory.GetFiles(Path.GetDirectoryName(fullName), sharedFileName, SearchOption.AllDirectories);
                                if (findFiles.Length > 0)
                                {
                                    sharedFilePath = findFiles[0];
                                }
                            }

                            if (File.Exists(sharedFilePath))
                            {
                                importFiles.Add(sharedFilePath);
                                importFilesHash.Add(sharedFileName);
                            }
                        }
                    }
                }
                catch
                {
                    stream.Dispose();
                    //Logger.Warning($"Unable to load assets file {fileName}");
                }
            }
            else
            {
                stream.Dispose();
            }
        }
Exemplo n.º 2
0
        private void LoadWebFile(string fullName, EndianBinaryStream stream)
        {
            var fileName = Path.GetFileName(fullName);

            Logger.Info("Loading " + fileName);
            try
            {
                var webFile = new WebFile(stream.InitReader());
                foreach (var file in webFile.fileList)
                {
                    var dummyPath = Path.Combine(Path.GetDirectoryName(fullName), file.fileName);
                    switch (CheckFileType(file.stream, out var fileStream))
                    {
                    case FileType.AssetsFile:
                        LoadAssetsFromMemory(dummyPath, fileStream, fullName);
                        break;

                    case FileType.BundleFile:
                        LoadBundleFile(dummyPath, fileStream, fullName);
                        break;

                    case FileType.WebFile:
                        LoadWebFile(dummyPath, fileStream);
                        break;

                    case FileType.ResourceFile:
                        resourceFileStreams.Add(file.fileName, fileStream);
                        break;
                    }
                }
            }
            catch
            {
                // Logger.Error($"Unable to load web file {fileName}");
            }
            finally
            {
                stream.Dispose();
            }
        }
Exemplo n.º 3
0
        private void LoadBundleFile(string fullName, EndianBinaryStream stream, string parentPath = null)
        {
            var fileName = Path.GetFileName(fullName);

            Logger.Info("Loading " + fileName);
            try
            {
                var bundleFile = new BundleFile(stream, fullName);
                foreach (var file in bundleFile.fileList)
                {
                    var subStream = new EndianBinaryStream(file.stream);
                    if (SerializedFile.IsSerializedFile(subStream))
                    {
                        var dummyPath = Path.GetDirectoryName(fullName) + Path.DirectorySeparatorChar + file.fileName;
                        LoadAssetsFromMemory(dummyPath, subStream, parentPath ?? fullName, bundleFile.m_Header.unityRevision);
                    }
                    else
                    {
                        resourceFileStreams.Add(file.fileName, subStream);
                    }
                }
            }
            catch
            {
                /*var str = $"Unable to load bundle file {fileName}";
                 * if (parentPath != null)
                 * {
                 *  str += $" from {Path.GetFileName(parentPath)}";
                 * }
                 * Logger.Error(str);*/
            }
            finally
            {
                stream.Dispose();
            }
        }