Пример #1
0
        public Material Clone(AssetCabinet file, bool cloneTextures)
        {
            Component mat = file != this.file
                                ? file.Bundle != null && !file.Bundle.m_IsStreamedSceneAssetBundle
                                        ? file.Bundle.FindComponent(m_Name, UnityClassID.Material)
                                        : file.Components.Find
                            (
                delegate(Component asset)
            {
                return(asset.classID() == UnityClassID.Material &&
                       (asset is NotLoaded ? ((NotLoaded)asset).Name : ((Material)asset).m_Name) == m_Name);
            }
                            )
                                : null;

            if (mat == null)
            {
                file.MergeTypeDefinition(this.file, UnityClassID.Material);

                mat = new Material(file);
                if (file.Bundle != null && this.file.Bundle != null)
                {
                    List <Component> externals = new List <Component>();
                    AssetBundle.AddExternalAssetsFromPreloadTable(this, this.file.Bundle, externals);
                    for (int i = 0; i < externals.Count; i++)
                    {
                        ExternalAsset ext       = (ExternalAsset)externals[i];
                        string        assetPath = this.file.References[ext.FileID - 1].assetPath;
                        int           cabPos    = assetPath.LastIndexOf("/") + 1;
                        if (!AssetCabinet.LoadedCabinets.ContainsKey(assetPath.Substring(cabPos)))
                        {
                            ext.FileID = file.MergeReference(this.file, ext.FileID);
                        }
                        else
                        {
                            externals.RemoveAt(i--);
                        }
                    }
                    file.Bundle.AddComponent(m_Name, mat, externals);
                }
                CopyTo((Material)mat, cloneTextures);
            }
            else if (mat is NotLoaded)
            {
                NotLoaded notLoaded = (NotLoaded)mat;
                if (notLoaded.replacement != null)
                {
                    mat = notLoaded.replacement;
                }
                else
                {
                    mat = file.LoadComponent(file.SourceStream, notLoaded);
                }
            }
            return((Material)mat);
        }