From c741ed18c9df5eb03af14e330ac260d5dd64345f Mon Sep 17 00:00:00 2001 From: pharan Date: Sat, 8 Sep 2018 21:30:38 +0800 Subject: [PATCH] [unity] SkeletonDataModifierAsset --- .../Asset Types/BlendModeMaterialsAsset.cs | 4 +- .../Asset Types/SkeletonDataAsset.cs | 13 ++++-- .../Asset Types/SkeletonDataModifierAsset.cs | 40 +++++++++++++++++++ .../SkeletonDataModifierAsset.cs.meta | 12 ++++++ 4 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataModifierAsset.cs create mode 100644 spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataModifierAsset.cs.meta diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/BlendModeMaterialsAsset.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/BlendModeMaterialsAsset.cs index e838559bf..50d7746ca 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/BlendModeMaterialsAsset.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/BlendModeMaterialsAsset.cs @@ -38,14 +38,14 @@ using Spine.Unity; namespace Spine.Unity { [CreateAssetMenu(menuName = "Spine/Blend Mode Materials Asset", order = 200)] - public class BlendModeMaterialsAsset : ScriptableObject { + public class BlendModeMaterialsAsset : SkeletonDataModifierAsset { public Material multiplyMaterialTemplate; public Material screenMaterialTemplate; public Material additiveMaterialTemplate; public bool applyAdditiveMaterial; - public void Apply (SkeletonData skeletonData) { + public override void Apply (SkeletonData skeletonData) { ApplyMaterials(skeletonData, multiplyMaterialTemplate, screenMaterialTemplate, additiveMaterialTemplate, applyAdditiveMaterial); } diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataAsset.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataAsset.cs index 586176493..0997082df 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataAsset.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataAsset.cs @@ -29,6 +29,7 @@ *****************************************************************************/ using System; +using System.Collections.Generic; using System.IO; using UnityEngine; @@ -40,7 +41,6 @@ namespace Spine.Unity { public class SkeletonDataAsset : ScriptableObject { #region Inspector public AtlasAssetBase[] atlasAssets = new AtlasAssetBase[0]; - public BlendModeMaterialsAsset blendModeMaterials; #if SPINE_TK2D public tk2dSpriteCollectionData spriteCollection; @@ -49,6 +49,10 @@ namespace Spine.Unity { public float scale = 0.01f; #endif public TextAsset skeletonJSON; + + [Tooltip("Use SkeletonDataModifierAssets to apply changes to the SkeletonData after being loaded, such as apply blend mode Materials to Attachments under slots with special blend modes.")] + public List skeletonDataModifiers = new List(); + [SpineAnimation(includeNone: false)] public string[] fromAnimation = new string[0]; [SpineAnimation(includeNone: false)] @@ -165,8 +169,11 @@ namespace Spine.Unity { } - if (blendModeMaterials != null) - blendModeMaterials.Apply(loadedSkeletonData); + if (skeletonDataModifiers != null) { + foreach (var m in skeletonDataModifiers) { + if (m != null) m.Apply(loadedSkeletonData); + } + } this.InitializeWithData(loadedSkeletonData); diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataModifierAsset.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataModifierAsset.cs new file mode 100644 index 000000000..42f461cc1 --- /dev/null +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataModifierAsset.cs @@ -0,0 +1,40 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Spine.Unity { + /// Can be stored by SkeletonDataAsset to automatically apply modifications to loaded SkeletonData. + public abstract class SkeletonDataModifierAsset : ScriptableObject { + public abstract void Apply (SkeletonData skeletonData); + } +} diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataModifierAsset.cs.meta b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataModifierAsset.cs.meta new file mode 100644 index 000000000..ffcc5f171 --- /dev/null +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Asset Types/SkeletonDataModifierAsset.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 79a44aba1f342f440965874280b4c318 +timeCreated: 1536412736 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: