Skip to content

Commit

Permalink
[unity] Fixed blend mode materials not being generated when sequence …
Browse files Browse the repository at this point in the history
…uses multiple atlas pages. Closes EsotericSoftware#2201.
  • Loading branch information
HaraldCsaszar committed Nov 24, 2022
1 parent 8fb3876 commit 8c35338
Showing 1 changed file with 41 additions and 23 deletions.
Expand Up @@ -203,40 +203,58 @@ protected class TemplateMaterials {
var renderableAttachment = entry.Attachment as IHasTextureRegion;
if (renderableAttachment != null) {
var originalRegion = (AtlasRegion)renderableAttachment.Region;
Sequence sequence = null;
if (originalRegion == null && (sequence = renderableAttachment.Sequence) != null) {
if (sequence.Regions != null && sequence.Regions.Length > 0)
originalRegion = (AtlasRegion)sequence.Regions[0];
}
bool replacementExists = replacementMaterials.Exists(
replacement => replacement.pageName == originalRegion.page.name);
if (!replacementExists) {
bool createdNewMaterial;
var replacement = CreateOrLoadReplacementMaterial(originalRegion, materialTemplate, materialSuffix, out createdNewMaterial);
if (replacement != null) {
replacementMaterials.Add(replacement);
anyReplacementMaterialsChanged = true;
if (createdNewMaterial) {
Debug.Log(string.Format("Created blend mode Material '{0}' for SkeletonData asset '{1}'.",
replacement.material.name, skeletonDataAsset), replacement.material);
if (originalRegion != null) {
anyCreationFailed |= CreateForRegion(
ref replacementMaterials, ref anyReplacementMaterialsChanged,
originalRegion, materialTemplate, materialSuffix, skeletonDataAsset);
} else {
Sequence sequence = renderableAttachment.Sequence;
if (sequence != null && sequence.Regions != null) {
for (int i = 0, count = sequence.Regions.Length; i < count; ++i) {
originalRegion = (AtlasRegion)sequence.Regions[i];
anyCreationFailed |= CreateForRegion(
ref replacementMaterials, ref anyReplacementMaterialsChanged,
originalRegion, materialTemplate, materialSuffix, skeletonDataAsset);
}
} else {
Debug.LogError(string.Format("Failed creating blend mode Material for SkeletonData asset '{0}'," +
" atlas page '{1}', template '{2}'.",
skeletonDataAsset.name, originalRegion.page.name, materialTemplate.name),
skeletonDataAsset);
anyCreationFailed = true;
}
}
}
}
}

skeletonDataAsset.isUpgradingBlendModeMaterials = false;
EditorUtility.SetDirty(skeletonDataAsset);
return !anyCreationFailed;
}

protected static bool CreateForRegion (ref List<BlendModeMaterials.ReplacementMaterial> replacementMaterials,
ref bool anyReplacementMaterialsChanged,
AtlasRegion originalRegion, Material materialTemplate, string materialSuffix,
SkeletonDataAsset skeletonDataAsset) {

bool anyCreationFailed = false;
bool replacementExists = replacementMaterials.Exists(
replacement => replacement.pageName == originalRegion.page.name);
if (!replacementExists) {
bool createdNewMaterial;
var replacement = CreateOrLoadReplacementMaterial(originalRegion, materialTemplate, materialSuffix, out createdNewMaterial);
if (replacement != null) {
replacementMaterials.Add(replacement);
anyReplacementMaterialsChanged = true;
if (createdNewMaterial) {
Debug.Log(string.Format("Created blend mode Material '{0}' for SkeletonData asset '{1}'.",
replacement.material.name, skeletonDataAsset), replacement.material);
}
} else {
Debug.LogError(string.Format("Failed creating blend mode Material for SkeletonData asset '{0}'," +
" atlas page '{1}', template '{2}'.",
skeletonDataAsset.name, originalRegion.page.name, materialTemplate.name),
skeletonDataAsset);
anyCreationFailed = true;
}
}
return anyCreationFailed;
}

protected static string GetBlendModeMaterialPath (AtlasPage originalPage, string materialSuffix) {
var originalMaterial = originalPage.rendererObject as Material;
var originalPath = AssetDatabase.GetAssetPath(originalMaterial);
Expand Down

0 comments on commit 8c35338

Please sign in to comment.