72 lines
2.6 KiB
C#
72 lines
2.6 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using UnityEditor.Build.Content;
|
|
using UnityEditor.Build.Pipeline.Injector;
|
|
using UnityEditor.Build.Pipeline.Interfaces;
|
|
|
|
namespace UnityEditor.Build.Pipeline.Tasks
|
|
{
|
|
/// <summary>
|
|
/// Removes all unusued sprite source data from asset references and scene references.
|
|
/// </summary>
|
|
public class StripUnusedSpriteSources : IBuildTask
|
|
{
|
|
/// <inheritdoc />
|
|
public int Version { get { return 2; } }
|
|
|
|
#pragma warning disable 649
|
|
[InjectContext]
|
|
IDependencyData m_DependencyData;
|
|
|
|
[InjectContext(ContextUsage.In, true)]
|
|
IBuildSpriteData m_SpriteData;
|
|
|
|
[InjectContext(ContextUsage.InOut, true)]
|
|
IBuildExtendedAssetData m_ExtendedAssetData;
|
|
#pragma warning restore 649
|
|
|
|
/// <inheritdoc />
|
|
public ReturnCode Run()
|
|
{
|
|
if (m_SpriteData == null || m_SpriteData.ImporterData.Count == 0)
|
|
return ReturnCode.SuccessNotRun;
|
|
|
|
if (EditorSettings.spritePackerMode == SpritePackerMode.Disabled)
|
|
return ReturnCode.SuccessNotRun;
|
|
|
|
var unusedSources = new HashSet<ObjectIdentifier>();
|
|
var textures = m_SpriteData.ImporterData.Values.Where(x => x.PackedSprite).Select(x => x.SourceTexture);
|
|
unusedSources.UnionWith(textures);
|
|
|
|
// Count refs from assets
|
|
var assetRefs = m_DependencyData.AssetInfo.SelectMany(x => x.Value.referencedObjects);
|
|
foreach (ObjectIdentifier reference in assetRefs)
|
|
unusedSources.Remove(reference);
|
|
|
|
// Count refs from scenes
|
|
var sceneRefs = m_DependencyData.SceneInfo.SelectMany(x => x.Value.referencedObjects);
|
|
foreach (ObjectIdentifier reference in sceneRefs)
|
|
unusedSources.Remove(reference);
|
|
|
|
SetOutputInformation(unusedSources);
|
|
return ReturnCode.Success;
|
|
}
|
|
|
|
void SetOutputInformation(HashSet<ObjectIdentifier> unusedSources)
|
|
{
|
|
foreach (var source in unusedSources)
|
|
{
|
|
var assetInfo = m_DependencyData.AssetInfo[source.guid];
|
|
assetInfo.includedObjects.RemoveAt(0);
|
|
|
|
ExtendedAssetData extendedData;
|
|
if (m_ExtendedAssetData != null && m_ExtendedAssetData.ExtendedData.TryGetValue(source.guid, out extendedData))
|
|
{
|
|
extendedData.Representations.Remove(source);
|
|
if (extendedData.Representations.Count == 1)
|
|
m_ExtendedAssetData.ExtendedData.Remove(source.guid);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|