Example #1
0
 AssetEntry ReadAudioClip(Stream input, UnityObject obj)
 {
     using (var reader = obj.Open(input))
     {
         var clip = new AudioClip();
         clip.Load(reader);
         var bundle_name = Path.GetFileName(clip.m_Source);
         var bundle      = m_bundles.FirstOrDefault(b => b.Name == bundle_name);
         if (null == bundle)
         {
             return(null);
         }
         return(new AssetEntry {
             Type = "audio",
             Bundle = bundle,
             AssetObject = obj,
             Offset = bundle.Offset + clip.m_Offset,
             Size = (uint)clip.m_Size,
         });
     }
 }
Example #2
0
        string GetObjectName(Stream input, UnityObject obj)
        {
            var type = obj.Type;

            if (type != null && type.Children.Count > 0)
            {
                var first_field = type.Children[0];
                if ("m_Name" == first_field.Name && "string" == first_field.Type)
                {
                    using (var reader = obj.Open(input))
                    {
                        var name = reader.ReadString();
                        if (!string.IsNullOrEmpty(name))
                        {
                            return(name);
                        }
                    }
                }
            }
            return(obj.PathId.ToString("X16"));
        }
Example #3
0
        string GetObjectName(Stream input, UnityObject obj)
        {
            TypeTree type;

            if (obj.Asset.Tree.TypeTrees.TryGetValue(obj.TypeId, out type) && type.Children.Count > 0)
            {
                var first_field = type.Children[0];
                if ("m_Name" == first_field.Name && "string" == first_field.Type)
                {
                    using (var reader = obj.Open(input))
                    {
                        var name = reader.ReadString();
                        if (!string.IsNullOrEmpty(name))
                        {
                            return(name);
                        }
                    }
                }
            }
            return(obj.PathId.ToString("X16"));
        }
Example #4
0
        AssetEntry ReadAsset(Stream file, UnityObject obj)
        {
            string type = obj.Type;

            if ("AudioClip" == type)
            {
                return(ReadAudioClip(file, obj));
            }
            else if ("TextAsset" == type)
            {
                return(ReadTextAsset(file, obj));
            }
            else if ("Texture2D" == type)
            {
                type = "image";
            }

            return(new AssetEntry {
                Type = type,
                AssetObject = obj,
                Offset = obj.Offset,
                Size = obj.Size,
            });
        }
Example #5
0
        AssetEntry ReadTextAsset(Stream input, UnityObject obj)
        {
            var type_def = obj.Asset.Tree.TypeTrees[obj.TypeId];
            var script   = type_def.Children.FirstOrDefault(f => f.Name == "m_Script");

            if (null == script)
            {
                return(null);
            }
            using (var reader = obj.Open(input))
            {
                var name = reader.ReadString();
                reader.Align();
                uint size  = reader.ReadUInt32();
                var  entry = new AssetEntry {
                    AssetObject = obj,
                    Offset      = obj.Offset + reader.Position,
                    Size        = size,
                    IsEncrypted = 0 != (script.Flags & 0x04000000),
                };
                if (entry.IsEncrypted)
                {
                    uint signature = reader.ReadUInt32();
                    if (0x0D15F641 == signature)
                    {
                        entry.Type = "image";
                    }
                    else if (0x474E5089 == signature)
                    {
                        entry.Type        = "image";
                        entry.IsEncrypted = false;
                    }
                }
                return(entry);
            }
        }