Beispiel #1
0
        public string[] GetAssetNames(bool filter)
        {
            string[] assetNames = new string[Parser.Cabinet.Components.Count];
            using (BinaryReader reader = new BinaryReader(File.OpenRead(Parser.FilePath)))
            {
                Stream stream = reader.BaseStream;
                for (int i = 0; i < Parser.Cabinet.Components.Count; i++)
                {
                    NotLoaded comp = Parser.Cabinet.Components[i] as NotLoaded;
                    if (comp == null)
                    {
                        Component subfile = Parser.Cabinet.Components[i];
                        assetNames[i] = AssetCabinet.ToString(subfile);
                        continue;
                    }
                    if (comp.Name == null)
                    {
                        stream.Position = comp.offset;
                        switch (comp.classID1)
                        {
                        case UnityClassID.AssetBundle:
                        case UnityClassID.Avatar:
                        case UnityClassID.Mesh:
                            if (!filter)
                            {
                                comp.Name = reader.ReadNameA4();
                            }
                            break;

                        case UnityClassID.AudioClip:
                        case UnityClassID.AnimationClip:
                        case UnityClassID.AnimatorController:
                        case UnityClassID.AnimatorOverrideController:
                        case UnityClassID.Cubemap:
                        case UnityClassID.Material:
                        case UnityClassID.Shader:
                        case UnityClassID.Sprite:
                        case UnityClassID.TextAsset:
                        case UnityClassID.Texture2D:
                            comp.Name = reader.ReadNameA4();
                            break;

                        case UnityClassID.MonoScript:
                            comp.Name = comp.pathID + " / " + reader.ReadNameA4();
                            break;

                        case UnityClassID.Animator:
                        case UnityClassID.EllipsoidParticleEmitter:
                        case UnityClassID.Light:
                        case UnityClassID.ParticleAnimator:
                        case UnityClassID.ParticleRenderer:
                        case UnityClassID.ParticleSystem:
                        case UnityClassID.ParticleSystemRenderer:
                            comp.Name = GetNameFromGameObject(filter, stream);
                            break;

                        default:
                            if ((int)comp.classID1 <= -1 && comp.classID2 == UnityClassID.MonoBehaviour)
                            {
                                comp.Name = GetNameFromGameObject(filter, stream);
                                if (comp.Name == null)
                                {
                                    comp.Name = MonoBehaviour.LoadName(stream);
                                }
                            }
                            break;

                        case UnityClassID.AudioListener:
                        case UnityClassID.AudioSource:
                        case UnityClassID.BoxCollider:
                        case UnityClassID.Camera:
                        case UnityClassID.CapsuleCollider:
                        case UnityClassID.FlareLayer:
                        case UnityClassID.LinkToGameObject:
                        case UnityClassID.LinkToGameObject223:
                        case UnityClassID.LinkToGameObject225:
                        case UnityClassID.MeshCollider:
                        case UnityClassID.MeshFilter:
                        case UnityClassID.MeshRenderer:
                        case UnityClassID.MultiLink:
                        case UnityClassID.Projector:
                        case UnityClassID.Rigidbody:
                        case UnityClassID.SkinnedMeshRenderer:
                        case UnityClassID.SphereCollider:
                        case UnityClassID.SpriteRenderer:
                        case UnityClassID.Transform:
                            if (!filter)
                            {
                                comp.Name = GetNameFromGameObject(true, stream);
                            }
                            break;

                        case UnityClassID.GameObject:
                            if (!filter || IsVirtualAnimator(comp))
                            {
                                comp.Name = GameObject.LoadName(stream);
                            }
                            break;
                        }
                    }
                    assetNames[i] = comp.Name != null ? comp.Name : comp.pathID.ToString();
                }
            }
            return(assetNames);
        }