Merge branch '4.0' into 4.1-beta

This commit is contained in:
Harald Csaszar 2022-03-10 17:14:43 +01:00
commit 1ec9150965
6 changed files with 170 additions and 16 deletions

View File

@ -260,6 +260,7 @@
* Timeline naming improvements: `Spine AnimationState Clip` Inspector parameter `Custom Duration` changed and inverted to `Default Mix Duration` for more clarity. Shortened all Timeline add track menu entries from: `Spine.Unity.Playables - <track type>` to `Spine - <track type>`, `Spine Animation State Track` to `SkeletonAnimation Track`, `Spine AnimationState Graphic Track` to `SkeletonGraphic Track`, and `Spine Skeleton Flip Track` to `Skeleton Flip Track`.
* Timeline track appearance and Inspector: Tracks now show icons and track colors to make them easier to distinguish. When a Track is selected, the Inspector now shows an editable track name which was previously only editable at the Timeline asset.
* Added example component `SkeletonRenderTexture` to render a `SkeletonRenderer` to a `RenderTexture`, mainly for proper transparency. Added an example scene named `RenderTexture FadeOut Transparency` that demonstrates usage for a fadeout transparency effect.
* Added another fadeout example component named `SkeletonRenderTextureFadeout` which takes over transparency fadeout when enabled. You can use this component as-is, attach it in disabled state and enable it to start a fadeout effect.
* **Changes of default values**

View File

@ -392,8 +392,10 @@ MonoBehaviour:
m_HorizontalOverflow: 1
m_VerticalOverflow: 1
m_LineSpacing: 1
m_Text: "Enter play mode to see the problem of conventional alpha transparency\n
fadeout and how this can be fixed by using a RenderTexture."
m_Text: 'Enter play mode to see the problem of conventional alpha transparency
fadeout
and how this can be fixed by using a RenderTexture.'
--- !u!222 &541830409
CanvasRenderer:
m_ObjectHideFlags: 0
@ -529,7 +531,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: a4cc2b5fcffcac846aacb02b6dad0440, type: 3}
m_Name:
m_EditorClassIdentifier:
skeletonRenderTexture: {fileID: 1786065614}
renderTextureFadeout: {fileID: 1786065619}
normalSkeletonRenderer: {fileID: 334034153}
--- !u!1 &1369381599
GameObject:
@ -872,6 +874,7 @@ GameObject:
- component: {fileID: 1786065616}
- component: {fileID: 1786065615}
- component: {fileID: 1786065614}
- component: {fileID: 1786065619}
m_Layer: 0
m_Name: Spineboy CorrectFadeout
m_TagString: Untagged
@ -886,7 +889,7 @@ MonoBehaviour:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1786065613}
m_Enabled: 1
m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 25e6ceb271c9af848ae53f2af1073d0d, type: 3}
m_Name:
@ -998,6 +1001,19 @@ Transform:
m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1786065619
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1786065613}
m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5fc94f89310427643babb41e000a8462, type: 3}
m_Name:
m_EditorClassIdentifier:
fadeoutSeconds: 2
--- !u!1 &1799507977
GameObject:
m_ObjectHideFlags: 0

View File

@ -31,30 +31,60 @@
#define HAS_VECTOR_INT
#endif
using System.Collections;
using UnityEngine;
using UnityEngine.Events;
namespace Spine.Unity.Examples {
public class RenderTextureFadeoutExample : MonoBehaviour {
public SkeletonRenderTexture skeletonRenderTexture;
public SkeletonRenderTextureFadeout renderTextureFadeout;
public SkeletonRenderer normalSkeletonRenderer;
public void Update () {
float fadeoutAlpha = 1.0f - ((0.5f * Time.time) % 1.0f);
float fadeoutSeconds = 2.0f;
float fadeoutSecondsRemaining;
// changing transpacency at a MeshRenderer does not yield the desired effect
IEnumerator Start () {
while (true) {
StartFadeoutBad();
StartFadeoutGood();
yield return new WaitForSeconds(5.0f);
}
}
void Update () {
UpdateBadFadeOutAlpha();
}
void UpdateBadFadeOutAlpha () {
if (fadeoutSecondsRemaining == 0)
return;
fadeoutSecondsRemaining -= Time.deltaTime;
if (fadeoutSecondsRemaining <= 0) {
fadeoutSecondsRemaining = 0;
return;
}
float fadeoutAlpha = fadeoutSecondsRemaining / fadeoutSeconds;
// changing transparency at a MeshRenderer does not yield the desired effect
// due to overlapping attachment meshes.
normalSkeletonRenderer.Skeleton.SetColor(new Color(1, 1, 1, fadeoutAlpha));
}
#if HAS_VECTOR_INT
// Thus we render the whole skeleton to a RenderTexture first using the
// SkeletonRenderTexture component.
// Changing transparency at a single quad with a RenderTexture works as desired.
skeletonRenderTexture.color.a = fadeoutAlpha;
#else
Debug.LogError("The SkeletonRenderTexture component requires Unity 2017.2 or newer.");
#endif
void StartFadeoutBad () {
fadeoutSecondsRemaining = fadeoutSeconds;
}
void StartFadeoutGood () {
renderTextureFadeout.gameObject.SetActive(true);
// enabling the SkeletonRenderTextureFadeout component starts the fadeout.
renderTextureFadeout.enabled = true;
renderTextureFadeout.OnFadeoutComplete -= DisableGameObject;
renderTextureFadeout.OnFadeoutComplete += DisableGameObject;
}
void DisableGameObject (SkeletonRenderTextureFadeout target) {
target.gameObject.SetActive(false);
}
}
}

View File

@ -41,6 +41,14 @@ using UnityEngine.Rendering;
namespace Spine.Unity.Examples {
/// <summary>
/// When enabled, this component renders a skeleton to a RenderTexture and
/// then draws this RenderTexture at a quad of the same size.
/// This allows changing transparency at a single quad, which produces a more
/// natural fadeout effect.
/// Note: It is recommended to keep this component disabled as much as possible
/// because of the additional rendering overhead. Only enable it when alpha blending is required.
/// </summary>
[RequireComponent(typeof(SkeletonRenderer))]
public class SkeletonRenderTexture : MonoBehaviour {
#if HAS_VECTOR_INT

View File

@ -0,0 +1,88 @@
/******************************************************************************
* Spine Runtimes License Agreement
* Last updated January 1, 2020. Replaces all prior versions.
*
* Copyright (c) 2013-2022, Esoteric Software LLC
*
* Integration of the Spine Runtimes into software or otherwise creating
* derivative works of the Spine Runtimes is permitted under the terms and
* conditions of Section 2 of the Spine Editor License Agreement:
* http://esotericsoftware.com/spine-editor-license
*
* Otherwise, it is permitted to integrate the Spine Runtimes into software
* or otherwise create derivative works of the Spine Runtimes (collectively,
* "Products"), provided that each user of the Products must obtain their own
* Spine Editor license and redistribution of the Products in any form must
* include this license and copyright notice.
*
* THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "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 LLC 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
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*****************************************************************************/
#if UNITY_2019_3_OR_NEWER
#define HAS_FORCE_RENDER_OFF
#endif
#if UNITY_2017_2_OR_NEWER
#define HAS_VECTOR_INT
#endif
using UnityEngine;
namespace Spine.Unity.Examples {
/// <summary>
/// A simple fadeout component that uses a <see cref="SkeletonRenderTexture"/> for transparency fadeout.
/// Attach a <see cref="SkeletonRenderTexture"/> and this component to a skeleton GameObject and disable both
/// components initially and keep them disabled during normal gameplay. When you need to start fadeout,
/// enable this component.
/// At the end of the fadeout, the event delegate <c>OnFadeoutComplete</c> is called, to which you can bind e.g.
/// a method that disables or destroys the entire GameObject.
/// </summary>
[RequireComponent(typeof(SkeletonRenderTexture))]
public class SkeletonRenderTextureFadeout : MonoBehaviour {
SkeletonRenderTexture skeletonRenderTexture;
public float fadeoutSeconds = 2.0f;
protected float fadeoutSecondsRemaining;
public delegate void FadeoutCallback (SkeletonRenderTextureFadeout skeleton);
public event FadeoutCallback OnFadeoutComplete;
protected void Awake () {
skeletonRenderTexture = this.GetComponent<SkeletonRenderTexture>();
}
protected void OnEnable () {
fadeoutSecondsRemaining = fadeoutSeconds;
skeletonRenderTexture.enabled = true;
}
protected void Update () {
if (fadeoutSecondsRemaining == 0)
return;
fadeoutSecondsRemaining -= Time.deltaTime;
if (fadeoutSecondsRemaining <= 0) {
fadeoutSecondsRemaining = 0;
if (OnFadeoutComplete != null)
OnFadeoutComplete(this);
return;
}
float fadeoutAlpha = fadeoutSecondsRemaining / fadeoutSeconds;
#if HAS_VECTOR_INT
skeletonRenderTexture.color.a = fadeoutAlpha;
#else
Debug.LogError("The SkeletonRenderTexture component requires Unity 2017.2 or newer.");
#endif
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 5fc94f89310427643babb41e000a8462
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: