Пример #1
0
        internal MonoBehaviour(AssetPreloadData preloadData, bool metadataOnly)
        {
            var assetFile = preloadData.Source;
            var reader    = assetFile.FileReader;

            reader.Position = preloadData.Offset;

            var gameObject = assetFile.ReadPPtr();
            var enabled    = reader.ReadByte() != 0;

            reader.AlignBy(4);

            var script     = assetFile.ReadPPtr();
            var nameLength = reader.ReadInt32();
            var name       = reader.ReadAlignedString(nameLength);

            Name = string.IsNullOrEmpty(name) ? $"{preloadData.TypeName} #{preloadData.UniqueID}" : name;

            MetadataOnly = metadataOnly;
            if (metadataOnly)
            {
                return;
            }

            _variables = preloadData.GetStructure();
        }
Пример #2
0
 public MonoScript(AssetPreloadData preloadData) : base(preloadData)
 {
     if (version[0] > 3 || (version[0] == 3 && version[1] >= 4)) //3.4 and up
     {
         var m_ExecutionOrder = reader.ReadInt32();
     }
     if (version[0] < 5) //5.0 down
     {
         var m_PropertiesHash = reader.ReadUInt32();
     }
     else
     {
         var m_PropertiesHash = reader.ReadBytes(16);
     }
     if (version[0] < 3) //3.0 down
     {
         var m_PathName = reader.ReadAlignedString();
     }
     m_ClassName = reader.ReadAlignedString();
     if (version[0] >= 3) //3.0 and up
     {
         m_Namespace = reader.ReadAlignedString();
     }
     m_AssemblyName = reader.ReadAlignedString();
     if (version[0] < 2018 || (version[0] == 2018 && version[1] < 2)) //2018.2 down
     {
         var m_IsEditorScript = reader.ReadBoolean();
     }
 }
        public PPtrKeyframe(AssetPreloadData preloadData)
        {
            var reader = preloadData.sourceFile.reader;

            time  = reader.ReadSingle();
            value = preloadData.sourceFile.ReadPPtr();
        }
Пример #4
0
 protected EditorExtension(AssetPreloadData preloadData) : base(preloadData)
 {
     if (platform == BuildTarget.NoTarget)
     {
         var m_PrefabParentObject = sourceFile.ReadPPtr();
         var m_PrefabInternal     = sourceFile.ReadPPtr();
     }
 }
        public static MonoBehaviour LoadAsMonoBehaviour([NotNull] this AssetPreloadData preloadData, bool metadataOnly)
        {
            if (preloadData.KnownType != KnownClassID.MonoBehaviour)
            {
                throw new InvalidCastException("The asset preload data is not a MonoBehavior.");
            }

            return(new MonoBehaviour(preloadData, metadataOnly));
        }
        public static Avatar LoadAsAvatar([NotNull] this AssetPreloadData preloadData)
        {
            if (preloadData.KnownType != KnownClassID.Avatar)
            {
                throw new InvalidCastException("The asset preload data is not an Avatar.");
            }

            return(Avatar.ReadFromAssetPreloadData(preloadData));
        }
        public static Mesh LoadAsMesh([NotNull] this AssetPreloadData preloadData)
        {
            if (preloadData.KnownType != KnownClassID.Mesh)
            {
                throw new InvalidCastException("The asset preload data is not a Mesh.");
            }

            return(new Mesh(preloadData, false));
        }
Пример #8
0
 protected Texture(AssetPreloadData preloadData) : base(preloadData)
 {
     if (version[0] > 2017 || (version[0] == 2017 && version[1] >= 3)) //2017.3 and up
     {
         var m_ForcedFallbackFormat = reader.ReadInt32();
         var m_DownscaleFallback    = reader.ReadBoolean();
         reader.AlignStream(4);
     }
 }
        public static TextAsset LoadAsTextAsset([NotNull] this AssetPreloadData preloadData, bool metadataOnly)
        {
            if (preloadData.KnownType != KnownClassID.TextAsset)
            {
                throw new InvalidCastException("The asset preload data is not a TextAsset.");
            }

            return(new TextAsset(preloadData, metadataOnly));
        }
Пример #10
0
        public FloatCurve(AssetPreloadData preloadData)
        {
            var reader = preloadData.sourceFile.reader;

            curve     = new AnimationCurve <float>(reader, reader.ReadSingle, preloadData.sourceFile.version);
            attribute = reader.ReadAlignedString();
            path      = reader.ReadAlignedString();
            classID   = reader.ReadInt32();
            script    = preloadData.sourceFile.ReadPPtr();
        }
Пример #11
0
        private void ImportAssetPreloadData(AssetPreloadData assetPreloadData)
        {
            if (assetPreloadData == null)
            {
                throw new ArgumentNullException("assetPreloadData");
            }

            switch (assetPreloadData.Type2)
            {
            //case 1: //GameObject
            //case 4: //Transform
            //case 224: //RectTransform
            //case 21: //Material
            case 28:     //Texture2D
            {
                ExportTexture(assetPreloadData);
                break;
            }

            //case 48: //Shader
            case 49:     //TextAsset
            {
                ExportText(assetPreloadData);
                break;
            }

            case 83:     //AudioClip
            {
                ExportAudioClip(assetPreloadData);
                break;
            }

            //case 89: //CubeMap
            case 128:     //Font
            {
                // There have been issues with android font exports in the past, failing the font export is not fatal.
                try
                {
                    ExportFont(assetPreloadData);
                }
                catch (Exception e)
                {
                    ValkyrieDebug.Log("Font export error: '" + e.Message);
                }
                break;
            }

            //case 129: //PlayerSettings
            case 0:
                break;
            }
        }
Пример #12
0
        protected Object(AssetPreloadData preloadData)
        {
            sourceFile = preloadData.sourceFile;
            reader     = preloadData.InitReader();
            version    = sourceFile.version;
            buildType  = sourceFile.buildType;
            platform   = (BuildTarget)sourceFile.platform;

            if (platform == BuildTarget.NoTarget)
            {
                var m_ObjectHideFlags = reader.ReadUInt32();
            }
        }
Пример #13
0
        public AnimationEvent(AssetPreloadData preloadData)
        {
            var reader = preloadData.sourceFile.reader;

            // check version?
            time                     = reader.ReadSingle();
            functionName             = reader.ReadAlignedString();
            stringParameter          = reader.ReadAlignedString();
            objectReferenceParameter = preloadData.sourceFile.ReadPPtr();
            floatParameter           = reader.ReadSingle();
            intParameter             = reader.ReadInt32();
            messageOptions           = reader.ReadInt32();
        }
Пример #14
0
        public Transform(AssetPreloadData preloadData) : base(preloadData)
        {
            m_LocalRotation = new[] { reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle() };
            m_LocalPosition = new[] { reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle() };
            m_LocalScale    = new[] { reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle() };
            int m_ChildrenCount = reader.ReadInt32();

            m_Children = new List <PPtr>(m_ChildrenCount);
            for (int j = 0; j < m_ChildrenCount; j++)
            {
                m_Children.Add(sourceFile.ReadPPtr());
            }
            m_Father = sourceFile.ReadPPtr();
        }
Пример #15
0
        private void ImportAssetPreloadData(AssetPreloadData assetPreloadData)
        {
            if (assetPreloadData == null)
            {
                throw new ArgumentNullException("assetPreloadData");
            }

            switch (assetPreloadData.Type2)
            {
            //case 1: //GameObject
            //case 4: //Transform
            //case 224: //RectTransform
            //case 21: //Material
            case 28:     //Texture2D
            {
                ExportTexture(assetPreloadData);
                break;
            }

            //case 48: //Shader
            case 49:     //TextAsset
            {
                ExportText(assetPreloadData);
                break;
            }

            case 83:     //AudioClip
            {
                ExportAudioClip(assetPreloadData);
                break;
            }

            //case 89: //CubeMap
            case 128:     //Font
            {
                /*
                 * Do not Import fonts from Unity package anymore : an exception error on Android is blocking the Import for MoM.
                 * see #964: MoM 1.7.0 - broken import on Android bug
                 */

                // ExportFont(assetPreloadData);
                break;
            }

            //case 129: //PlayerSettings
            case 0:
                break;
            }
        }
Пример #16
0
        public PPtrCurve(AssetPreloadData preloadData)
        {
            var reader = preloadData.sourceFile.reader;

            int numCurves = reader.ReadInt32();

            curve = new List <PPtrKeyframe>(numCurves);
            for (int i = 0; i < numCurves; i++)
            {
                curve.Add(new PPtrKeyframe(preloadData));
            }

            attribute = reader.ReadAlignedString();
            path      = reader.ReadAlignedString();
            classID   = reader.ReadInt32();
            script    = preloadData.sourceFile.ReadPPtr();
        }
Пример #17
0
        private void ImportAssetPreloadData(AssetPreloadData assetPreloadData)
        {
            if (assetPreloadData == null)
            {
                throw new ArgumentNullException("assetPreloadData");
            }

            switch (assetPreloadData.Type2)
            {
            //case 1: //GameObject
            //case 4: //Transform
            //case 224: //RectTransform
            //case 21: //Material
            case 28:     //Texture2D
            {
                ExportTexture(assetPreloadData);
                break;
            }

            //case 48: //Shader
            case 49:     //TextAsset
            {
                ExportText(assetPreloadData);
                break;
            }

            case 83:     //AudioClip
            {
                ExportAudioClip(assetPreloadData);
                break;
            }

            //case 89: //CubeMap
            case 128:     //Font
            {
                ExportFont(assetPreloadData);
                break;
            }

            //case 129: //PlayerSettings
            case 0:
                break;
            }
        }
Пример #18
0
        public AnimationClipBindingConstant(AssetPreloadData preloadData)
        {
            var reader      = preloadData.sourceFile.reader;
            int numBindings = reader.ReadInt32();

            genericBindings = new List <GenericBinding>(numBindings);
            for (int i = 0; i < numBindings; i++)
            {
                genericBindings.Add(new GenericBinding(preloadData));
            }

            int numMappings = reader.ReadInt32();

            pptrCurveMapping = new List <PPtr>(numMappings);
            for (int i = 0; i < numMappings; i++)
            {
                pptrCurveMapping.Add(preloadData.sourceFile.ReadPPtr());
            }
        }
Пример #19
0
        public GenericBinding(AssetPreloadData preloadData)
        {
            var reader  = preloadData.sourceFile.reader;
            var version = preloadData.sourceFile.version;

            path      = reader.ReadUInt32();
            attribute = reader.ReadUInt32();
            script    = preloadData.sourceFile.ReadPPtr();
            if (version[0] > 5 || (version[0] == 5 && version[1] >= 6)) //5.6 and up
            {
                typeID = reader.ReadInt32();
            }
            else
            {
                typeID = reader.ReadUInt16();
            }
            customType  = reader.ReadByte();
            isPPtrCurve = reader.ReadByte();
            reader.AlignStream(4);
        }
Пример #20
0
        public BuildSettings(AssetPreloadData preloadData)
        {
            var sourceFile = preloadData.SourceFile;
            var reader     = preloadData.SourceFile.AssetReader;

            reader.Position = preloadData.Offset;

            var levels = reader.ReadInt32();

            for (var l = 0; l < levels; l++)
            {
                var level = reader.ReadAlignedUtf8String(reader.ReadInt32());
            }

            if (sourceFile.RawVersion[0] == 5)
            {
                var preloadedPlugins = reader.ReadInt32();
                for (var l = 0; l < preloadedPlugins; l++)
                {
                    var preloadedPlugin = reader.ReadAlignedUtf8String(reader.ReadInt32());
                }
            }

            reader.Position += 4;
            if (sourceFile.FormatSignature >= 8)
            {
                reader.Position += 4;
            }
            if (sourceFile.FormatSignature >= 9)
            {
                reader.Position += 4;
            }
            if (sourceFile.RawVersion[0] == 5 || (sourceFile.RawVersion[0] == 4 && (sourceFile.RawVersion[1] >= 3 || (sourceFile.RawVersion[1] == 2 && sourceFile.BuildTypes[0] != "a"))))
            {
                reader.Position += 4;
            }

            var versionLength = reader.ReadInt32();

            VersionString = reader.ReadAlignedUtf8String(versionLength);
        }
Пример #21
0
        public GameObject(AssetPreloadData preloadData) : base(preloadData)
        {
            int m_Component_size = reader.ReadInt32();

            m_Component = new List <PPtr>(m_Component_size);
            for (int j = 0; j < m_Component_size; j++)
            {
                if ((version[0] == 5 && version[1] >= 5) || version[0] > 5)//5.5.0 and up
                {
                    m_Component.Add(sourceFile.ReadPPtr());
                }
                else
                {
                    int first = reader.ReadInt32();
                    m_Component.Add(sourceFile.ReadPPtr());
                }
            }
            var m_Layer = reader.ReadInt32();

            m_Name = reader.ReadAlignedString();
        }
Пример #22
0
        internal static Avatar ReadFromAssetPreloadData([NotNull] AssetPreloadData preloadData)
        {
            var sourceFile = preloadData.Source;
            var version    = sourceFile.VersionComponents;
            var reader     = sourceFile.FileReader;
            var avatar     = new Avatar();

            reader.Position = preloadData.Offset;

            avatar.Name = reader.ReadAlignedString();
            avatar.Size = reader.ReadUInt32();

            avatar.AvatarSkeleton     = ReadSkeleton();
            avatar.AvatarSkeletonPose = ReadPose();

            if (version[0] > 4 || (version[0] == 4 && version[1] >= 3))
            {
                avatar.DefaultPose = ReadPose();

                var idCount = reader.ReadInt32();

                avatar.SkeletonNameIDs = new uint[idCount];

                for (var i = 0; i < idCount; ++i)
                {
                    avatar.SkeletonNameIDs[i] = reader.ReadUInt32();
                }
            }

            avatar.Human = ReadHuman();

            reader.AlignBy(4);

            avatar.HumanSkeletonIndices = ReadArray(reader.ReadInt32);

            if (version[0] > 4 || (version[0] == 4 && version[1] >= 3))
            {
                avatar.HumanSkeletonReverseIndices = ReadArray(reader.ReadInt32);
            }

            avatar.RootMotionBoneIndex = reader.ReadInt32();

            avatar.RootMotionBoneTransform = ReadTransform();

            if (version[0] > 4 || (version[0] == 4 && version[1] >= 3))
            {
                avatar.RootMotionSkeleton        = ReadSkeleton();
                avatar.RootMotionSkeletonPose    = ReadPose();
                avatar.RootMotionSkeletonIndices = ReadArray(reader.ReadInt32);
            }

            var nameMapEntryCount = reader.ReadInt32();

            for (var i = 0; i < nameMapEntryCount; ++i)
            {
                var key   = reader.ReadUInt32();
                var value = reader.ReadAlignedString();
                avatar._boneNamesMap[key] = value;
            }

            return(avatar);

            Skeleton ReadSkeleton()
            {
                var skeleton = new Skeleton();

                var nodeCount = reader.ReadInt32();

                skeleton.Nodes = new SkeletonNode[nodeCount];

                for (var i = 0; i < nodeCount; ++i)
                {
                    var parentId = reader.ReadInt32();
                    var axesId   = reader.ReadInt32();

                    skeleton.Nodes[i] = new SkeletonNode(parentId, axesId);
                }

                var idCount = reader.ReadInt32();

                skeleton.NodeIDs = new uint[idCount];

                for (var i = 0; i < idCount; ++i)
                {
                    skeleton.NodeIDs[i] = reader.ReadUInt32();
                }

                var axesCount = reader.ReadInt32();

                skeleton.Axes = new object[axesCount];

                for (var i = 0; i < axesCount; ++i)
                {
                    if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))
                    {
                        reader.Position += 76;
                    }
                    else
                    {
                        reader.Position += 88;
                    }
                }

                return(skeleton);
            }

            SkeletonPose ReadPose()
            {
                var pose = new SkeletonPose();

                var transformCount = reader.ReadInt32();

                pose.Transforms = new Transform[transformCount];

                for (var i = 0; i < transformCount; ++i)
                {
                    pose.Transforms[i] = ReadTransform();
                }

                return(pose);
            }

            Human ReadHuman()
            {
                var human = new Human();

                human.RootTransform = ReadTransform();
                human.Skeleton      = ReadSkeleton();
                human.SkeletonPose  = ReadPose();
                human.LeftHand      = ReadHand();
                human.RightHand     = ReadHand();

                if (version[0] < 2018 || (version[0] == 2018 && version[1] < 2))
                {
                    var handleCount = reader.ReadInt32();

                    human.Handles = new object[handleCount];

                    for (var i = 0; i < handleCount; ++i)
                    {
                        if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))
                        {
                            reader.Position += 48;
                        }
                        else
                        {
                            reader.Position += 56;
                        }
                    }

                    var colliderCount = reader.ReadInt32();

                    human.Colliders = new object[colliderCount];

                    for (var i = 0; i < colliderCount; ++i)
                    {
                        if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))
                        {
                            reader.Position += 72;
                        }
                        else
                        {
                            reader.Position += 80;
                        }
                    }
                }

                human.HumanBoneIndices = ReadArray(reader.ReadInt32);

                var massCount = reader.ReadInt32();

                human.HumanBoneMasses = new float[massCount];

                for (var i = 0; i < massCount; ++i)
                {
                    human.HumanBoneMasses[i] = reader.ReadSingle();
                }

                if (version[0] < 2018 || (version[0] == 2018 && version[1] < 2))
                {
                    human.ColliderIndices = ReadArray(reader.ReadInt32);
                }

                human.Scale         = reader.ReadSingle();
                human.ArmTwist      = reader.ReadSingle();
                human.ForeArmTwist  = reader.ReadSingle();
                human.UpperLegTwist = reader.ReadSingle();
                human.LegTwist      = reader.ReadSingle();
                human.ArmStretch    = reader.ReadSingle();
                human.LegStretch    = reader.ReadSingle();
                human.FeetSpacing   = reader.ReadSingle();
                human.HasLeftHand   = reader.ReadBoolean();
                human.HasRightHand  = reader.ReadBoolean();
                human.HasTDoF       = reader.ReadBoolean();

                return(human);
            }

            Hand ReadHand()
            {
                var hand = new Hand();

                var fingerIndexCount = reader.ReadInt32();

                for (var i = 0; i < fingerIndexCount; ++i)
                {
                    hand[i] = reader.ReadInt32();
                }

                return(hand);
            }

            Transform ReadTransform()
            {
                Transform transform;

                if (version[0] > 5 || (version[0] == 5 && version[1] >= 4))
                {
                    var t = reader.ReadVector3();
                    var q = reader.ReadQuaternion();
                    var s = reader.ReadVector3();

                    transform = new Transform(t, q, s);
                }
                else
                {
                    var t = reader.ReadVector4();
                    var q = reader.ReadQuaternion();
                    var s = reader.ReadVector4();

                    transform = new Transform {
                        Translation = new Vector3(t.X, t.Y, t.Z),
                        Rotation    = q,
                        Scale       = new Vector3(s.X, s.Y, s.Z)
                    };
                }

                return(transform);
            }

            T[] ReadArray <T>(Func <T> readFunc)
            {
                var indexCount = reader.ReadInt32();
                var result     = new T[indexCount];

                for (var i = 0; i < indexCount; ++i)
                {
                    result[i] = readFunc();
                }

                return(result);
            }
        }
Пример #23
0
        //public List<AnimationEvent> m_Events { get; set; }


        public AnimationClip(AssetPreloadData preloadData) : base(preloadData)
        {
            if (version[0] >= 5)//5.0 and up
            {
                m_Legacy = reader.ReadBoolean();
            }
            else if (version[0] >= 4)//4.0 and up
            {
                m_AnimationType = reader.ReadInt32();
                if (m_AnimationType == 1)
                {
                    m_Legacy = true;
                }
            }
            else
            {
                m_Legacy = true;
            }
            m_Compressed = reader.ReadBoolean();
            if (version[0] > 4 || (version[0] == 4 && version[1] >= 3))//4.3 and up
            {
                m_UseHighQualityCurve = reader.ReadBoolean();
            }
            reader.AlignStream(4);
            int numRCurves = reader.ReadInt32();

            m_RotationCurves = new List <QuaternionCurve>(numRCurves);
            for (int i = 0; i < numRCurves; i++)
            {
                m_RotationCurves.Add(new QuaternionCurve(reader, version));
            }

            int numCRCurves = reader.ReadInt32();

            m_CompressedRotationCurves = new List <CompressedAnimationCurve>(numCRCurves);
            for (int i = 0; i < numCRCurves; i++)
            {
                m_CompressedRotationCurves.Add(new CompressedAnimationCurve(reader));
            }

            if (version[0] > 5 || (version[0] == 5 && version[1] >= 3))//5.3 and up
            {
                int numEulerCurves = reader.ReadInt32();
                m_EulerCurves = new List <Vector3Curve>(numEulerCurves);
                for (int i = 0; i < numEulerCurves; i++)
                {
                    m_EulerCurves.Add(new Vector3Curve(reader, version));
                }
            }

            int numPCurves = reader.ReadInt32();

            m_PositionCurves = new List <Vector3Curve>(numPCurves);
            for (int i = 0; i < numPCurves; i++)
            {
                m_PositionCurves.Add(new Vector3Curve(reader, version));
            }

            int numSCurves = reader.ReadInt32();

            m_ScaleCurves = new List <Vector3Curve>(numSCurves);
            for (int i = 0; i < numSCurves; i++)
            {
                m_ScaleCurves.Add(new Vector3Curve(reader, version));
            }

            int numFCurves = reader.ReadInt32();

            m_FloatCurves = new List <FloatCurve>(numFCurves);
            for (int i = 0; i < numFCurves; i++)
            {
                m_FloatCurves.Add(new FloatCurve(preloadData));
            }

            if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up
            {
                int numPtrCurves = reader.ReadInt32();
                m_PPtrCurves = new List <PPtrCurve>(numPtrCurves);
                for (int i = 0; i < numPtrCurves; i++)
                {
                    m_PPtrCurves.Add(new PPtrCurve(preloadData));
                }
            }

            m_SampleRate = reader.ReadSingle();
            m_WrapMode   = reader.ReadInt32();
            if (version[0] > 3 || (version[0] == 3 && version[1] >= 4)) //3.4 and up
            {
                m_Bounds = new AABB(reader);
            }
            if (version[0] >= 4)//4.0 and up
            {
                m_MuscleClipSize = reader.ReadUInt32();
                m_MuscleClip     = new ClipMuscleConstant(reader, version);
            }
            if (version[0] > 4 || (version[0] == 4 && version[1] >= 3)) //4.3 and up
            {
                m_ClipBindingConstant = new AnimationClipBindingConstant(preloadData);
            }

            /*int numEvents = reader.ReadInt32();
             * m_Events = new List<AnimationEvent>(numEvents);
             * for (int i = 0; i < numEvents; i++)
             * {
             *  m_Events.Add(new AnimationEvent(stream, file.Version[0] - '0'));
             * }*/
        }
Пример #24
0
 public TextAsset(AssetPreloadData preloadData) : base(preloadData)
 {
     m_Script = reader.ReadBytes(reader.ReadInt32());
 }
 internal static bool HasStructMember([NotNull] this AssetPreloadData preloadData, [NotNull] string name)
 {
     return(preloadData.Source.Objects.TryGetValue(preloadData.Type1, out var classStructure) &&
            classStructure.Children.Any(x => x.Name == name));
 }
Пример #26
0
        internal TextAsset([NotNull] AssetPreloadData preloadData, bool metadataOnly)
        {
            var sourceFile = preloadData.Source;
            var reader     = sourceFile.FileReader;

            reader.Position = preloadData.Offset;

            if (sourceFile.Platform == AssetPlatform.UnityPackage)
            {
                var objectHideFlags    = reader.ReadUInt32();
                var prefabParentObject = sourceFile.ReadPPtr();
                var prefabInternal     = sourceFile.ReadPPtr();
            }

            Name = reader.ReadAlignedString();

            var scriptSize = reader.ReadInt32();

            if (metadataOnly)
            {
                var isLzmaCompressed = reader.ReadByte();

                if (isLzmaCompressed == 93)
                {
                    reader.Position += 4;
                    preloadData.Size = reader.ReadInt32(); //actualy int64
                    Size             = preloadData.Size;
                    reader.Position -= 8;
                }
                else
                {
                    preloadData.Size = scriptSize;
                }

                reader.Position += scriptSize - 1;
            }
            else
            {
                var script = new byte[scriptSize];

                reader.Read(script, 0, scriptSize);

                if (script[0] == 93)
                {
                    script = SevenZipHelper.Decompress(script);
                }

                RawData = script;

                Size = scriptSize;
            }

            var assetDataVersionNumbers = preloadData.Source.VersionComponents;

            // It seems like the "PathName" property was removed in 2017.4.
            if (assetDataVersionNumbers[0] < 2017 ||
                (assetDataVersionNumbers[0] == 2017 && assetDataVersionNumbers[1] <= 3))
            {
                reader.AlignBy(4);

                PathName = reader.ReadAlignedString();
            }
            else
            {
                PathName = Name;
            }
        }
Пример #27
0
        private void ReadImageInfo(AssetPreloadData preloadData)
        {
            preloadData.InfoText   = $"Width: {Width}\nHeight: {Height}\nFormat: ";
            preloadData.ExportSize = ImageDataSize;

            var textureFormat = (TextureFormat)Format;

            preloadData.InfoText += textureFormat.ToString();
            switch (textureFormat)
            {
            case TextureFormat.Alpha8:
            case TextureFormat.ARGB4444:
            case TextureFormat.RGB24:
            case TextureFormat.RGBA32:
            case TextureFormat.ARGB32:
            case TextureFormat.RGB565:
            case TextureFormat.DXT1:
            case TextureFormat.DXT5:
            case TextureFormat.RGBA4444:
            case TextureFormat.BGRA32:
                preloadData.Extension   = ".dds";
                TextureType             = TextureType.DDS;
                preloadData.ExportSize += 128;
                break;

            case TextureFormat.DXT1Crunched:
            case TextureFormat.DXT5Crunched:
                preloadData.Extension = ".crn";
                TextureType           = TextureType.CRN;
                break;

            case TextureFormat.YUY2:
            case TextureFormat.PVRTC_RGB2:
            case TextureFormat.PVRTC_RGBA2:
            case TextureFormat.PVRTC_RGB4:
            case TextureFormat.PVRTC_RGBA4:
            case TextureFormat.ETC_RGB4:
            case TextureFormat.ETC2_RGB:
            case TextureFormat.ETC2_RGBA1:
            case TextureFormat.ETC2_RGBA8:
            case TextureFormat.EAC_R:
            case TextureFormat.EAC_R_SIGNED:
            case TextureFormat.EAC_RG:
            case TextureFormat.EAC_RG_SIGNED:
                preloadData.Extension   = ".pvr";
                TextureType             = TextureType.PVR;
                preloadData.ExportSize += 52;
                break;

            case TextureFormat.RHalf:
            case TextureFormat.RGHalf:
            case TextureFormat.RGBAHalf:
            case TextureFormat.RFloat:
            case TextureFormat.RGFloat:
            case TextureFormat.RGBAFloat:
            case TextureFormat.ATC_RGB4:
            case TextureFormat.ATC_RGBA8:
                preloadData.Extension   = ".ktx";
                TextureType             = TextureType.KTX;
                preloadData.ExportSize += 68;
                break;

            case TextureFormat.ASTC_RGB_4x4:
            case TextureFormat.ASTC_RGB_5x5:
            case TextureFormat.ASTC_RGB_6x6:
            case TextureFormat.ASTC_RGB_8x8:
            case TextureFormat.ASTC_RGB_10x10:
            case TextureFormat.ASTC_RGB_12x12:
            case TextureFormat.ASTC_RGBA_4x4:
            case TextureFormat.ASTC_RGBA_5x5:
            case TextureFormat.ASTC_RGBA_6x6:
            case TextureFormat.ASTC_RGBA_8x8:
            case TextureFormat.ASTC_RGBA_10x10:
            case TextureFormat.ASTC_RGBA_12x12:
                preloadData.Extension   = ".astc";
                preloadData.ExportSize += 10;
                break;

            default:
                preloadData.Extension = $"_{textureFormat}.tex";
                TextureType           = TextureType.Unknown;
                break;
            }

            switch (FilterMode)
            {
            case UnityEngine.FilterMode.Point:
                preloadData.InfoText += "\nFilter Mode: Point";
                break;

            case UnityEngine.FilterMode.Bilinear:
                preloadData.InfoText += "\nFilter Mode: Bilinear";
                break;

            case UnityEngine.FilterMode.Trilinear:
                preloadData.InfoText += "\nFilter Mode: Trilinear";
                break;
            }

            preloadData.InfoText += $"\nAnisotropic level: {AnisotropicLevel}\nMip map bias: {MipBias}";

            switch (WrapMode)
            {
            case UnityEngine.WrapMode.Repeat:
                preloadData.InfoText += "\nWrap mode: Repeat";
                break;

            case UnityEngine.WrapMode.Clamp:
                preloadData.InfoText += "\nWrap mode: Clamp";
                break;
            }
        }
 public MonoBehaviour(AssetPreloadData preloadData) : base(preloadData)
 {
     m_Script = sourceFile.ReadPPtr();
     m_Name   = reader.ReadAlignedString();
 }
Пример #29
0
 public Texture2D(AssetPreloadData data)
 {
     Initialize(data);
 }
Пример #30
0
        private void Initialize(AssetPreloadData preloadData)
        {
            var sourceFile = preloadData.SourceFile;
            var reader     = sourceFile.AssetReader;

            reader.Position = preloadData.Offset;

            if (sourceFile.Platform == UnityPlatformID.UnityPackage)
            {
                var objectHideFlags    = reader.ReadUInt32();
                var prefabParentObject = sourceFile.ReadPPtr();
                var prefabInternal     = sourceFile.ReadPPtr();
            }

            var nameLength = reader.ReadInt32();

            Name              = reader.ReadAlignedUtf8String(nameLength);
            Width             = reader.ReadInt32();
            Height            = reader.ReadInt32();
            CompleteImageSize = reader.ReadInt32();
            Format            = reader.ReadInt32();

            if (sourceFile.RawVersion[0] < 5 || (sourceFile.RawVersion[0] == 5 && sourceFile.RawVersion[1] < 2))
            {
                HasMipMap = reader.ReadBoolean();
            }
            else
            {
                DdsFlags |= 0x20000;
                //is this with or without main image?
                MipMapCount = reader.ReadInt32();
                DdsCaps    |= 0x400008;
            }

            //2.6.0 and up
            IsReadable = reader.ReadBoolean();
            //3.0.0 and up
            IsReadAllowed = reader.ReadBoolean();
            reader.AlignStream(4);

            ImageCount       = reader.ReadInt32();
            TextureDimension = reader.ReadInt32();
            //m_TextureSettings
            FilterMode       = reader.ReadInt32();
            AnisotropicLevel = reader.ReadInt32();
            MipBias          = reader.ReadSingle();
            WrapMode         = reader.ReadInt32();

            if (sourceFile.RawVersion[0] >= 3)
            {
                LightmapFormat = reader.ReadInt32();
                if (sourceFile.RawVersion[0] >= 4 || sourceFile.RawVersion[1] >= 5)
                {
                    //3.5.0 and up (hozuki: >=4.5.0?)
                    ColorSpace = reader.ReadInt32();
                }
            }

            ImageDataSize = reader.ReadInt32();

            if (HasMipMap)
            {
                DdsFlags   |= 0x20000;
                MipMapCount = Convert.ToInt32(Math.Log(Math.Max(Width, Height)) / Math.Log(2));
                DdsCaps    |= 0x400008;
            }

            if (ImageDataSize == 0 && ((sourceFile.RawVersion[0] == 5 && sourceFile.RawVersion[1] >= 3) || sourceFile.RawVersion[0] > 5))
            {
                //5.3.0 and up
                Offset        = reader.ReadUInt32();
                Size          = reader.ReadUInt32();
                ImageDataSize = (int)Size;
                var pathLength = reader.ReadInt32();
                FullFileName = reader.ReadAlignedUtf8String(pathLength);
            }

            ReadImageInfo(preloadData);
            ReadImageData(preloadData);
        }