mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-03-06 10:46:53 +08:00
[unity] Fixed IAnimationStateComponent missing (destroyed) component exception due to interface null check instead of using overloaded UnityEngine.Object.operator==. Closes #1972.
IAnimationStateComponent throws exception due to interface null check #1972
This commit is contained in:
parent
12cd0d7c0b
commit
4b70b1489c
@ -53,8 +53,8 @@ namespace Spine.Unity.Examples {
|
|||||||
#if UNITY_EDITOR
|
#if UNITY_EDITOR
|
||||||
void OnValidate () {
|
void OnValidate () {
|
||||||
if (Application.isPlaying) return;
|
if (Application.isPlaying) return;
|
||||||
spineComponent = spineComponent ?? GetComponent<ISkeletonAnimation>();
|
if (spineComponent == null) spineComponent = GetComponent<ISkeletonAnimation>();
|
||||||
if (spineComponent == null) return;
|
if (spineComponent.IsNullOrDestroyed()) return;
|
||||||
if (bone != null) bone.SetToSetupPose();
|
if (bone != null) bone.SetToSetupPose();
|
||||||
OverrideLocal(spineComponent);
|
OverrideLocal(spineComponent);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -48,9 +48,11 @@ namespace Spine.Unity.Prototyping {
|
|||||||
IAnimationStateComponent animationStateComponent;
|
IAnimationStateComponent animationStateComponent;
|
||||||
|
|
||||||
void Start () {
|
void Start () {
|
||||||
skeletonComponent = skeletonComponent ?? GetComponent<ISkeletonComponent>();
|
if (skeletonComponent == null)
|
||||||
|
skeletonComponent = GetComponent<ISkeletonComponent>();
|
||||||
if (skeletonComponent == null) return;
|
if (skeletonComponent == null) return;
|
||||||
animationStateComponent = animationStateComponent ?? skeletonComponent as IAnimationStateComponent;
|
if (animationStateComponent == null)
|
||||||
|
animationStateComponent = skeletonComponent as IAnimationStateComponent;
|
||||||
if (animationStateComponent == null) return;
|
if (animationStateComponent == null) return;
|
||||||
var skeleton = skeletonComponent.Skeleton;
|
var skeleton = skeletonComponent.Skeleton;
|
||||||
if (skeleton == null) return;
|
if (skeleton == null) return;
|
||||||
@ -66,8 +68,8 @@ namespace Spine.Unity.Prototyping {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void OnDestroy () {
|
void OnDestroy () {
|
||||||
animationStateComponent = animationStateComponent ?? GetComponent<IAnimationStateComponent>();
|
if (animationStateComponent == null) animationStateComponent = GetComponent<IAnimationStateComponent>();
|
||||||
if (animationStateComponent == null) return;
|
if (animationStateComponent.IsNullOrDestroyed()) return;
|
||||||
|
|
||||||
var state = animationStateComponent.AnimationState;
|
var state = animationStateComponent.AnimationState;
|
||||||
foreach (var ep in events) {
|
foreach (var ep in events) {
|
||||||
|
|||||||
@ -39,8 +39,16 @@ namespace Spine.Unity {
|
|||||||
|
|
||||||
public delegate void UpdateBonesDelegate (ISkeletonAnimation animated);
|
public delegate void UpdateBonesDelegate (ISkeletonAnimation animated);
|
||||||
|
|
||||||
|
public interface ISpineComponent { }
|
||||||
|
public static class ISpineComponentExtensions {
|
||||||
|
public static bool IsNullOrDestroyed (this ISpineComponent component) {
|
||||||
|
if (component == null) return true;
|
||||||
|
return (UnityEngine.Object)component == null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>A Spine-Unity Component that animates a Skeleton but not necessarily with a Spine.AnimationState.</summary>
|
/// <summary>A Spine-Unity Component that animates a Skeleton but not necessarily with a Spine.AnimationState.</summary>
|
||||||
public interface ISkeletonAnimation {
|
public interface ISkeletonAnimation : ISpineComponent {
|
||||||
event UpdateBonesDelegate UpdateLocal;
|
event UpdateBonesDelegate UpdateLocal;
|
||||||
event UpdateBonesDelegate UpdateWorld;
|
event UpdateBonesDelegate UpdateWorld;
|
||||||
event UpdateBonesDelegate UpdateComplete;
|
event UpdateBonesDelegate UpdateComplete;
|
||||||
@ -48,13 +56,13 @@ namespace Spine.Unity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Holds a reference to a SkeletonDataAsset.</summary>
|
/// <summary>Holds a reference to a SkeletonDataAsset.</summary>
|
||||||
public interface IHasSkeletonDataAsset {
|
public interface IHasSkeletonDataAsset : ISpineComponent {
|
||||||
/// <summary>Gets the SkeletonDataAsset of the Spine Component.</summary>
|
/// <summary>Gets the SkeletonDataAsset of the Spine Component.</summary>
|
||||||
SkeletonDataAsset SkeletonDataAsset { get; }
|
SkeletonDataAsset SkeletonDataAsset { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>A Spine-Unity Component that manages a Spine.Skeleton instance, instantiated from a SkeletonDataAsset.</summary>
|
/// <summary>A Spine-Unity Component that manages a Spine.Skeleton instance, instantiated from a SkeletonDataAsset.</summary>
|
||||||
public interface ISkeletonComponent {
|
public interface ISkeletonComponent : ISpineComponent {
|
||||||
/// <summary>Gets the SkeletonDataAsset of the Spine Component.</summary>
|
/// <summary>Gets the SkeletonDataAsset of the Spine Component.</summary>
|
||||||
//[System.Obsolete]
|
//[System.Obsolete]
|
||||||
SkeletonDataAsset SkeletonDataAsset { get; }
|
SkeletonDataAsset SkeletonDataAsset { get; }
|
||||||
@ -64,18 +72,18 @@ namespace Spine.Unity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>A Spine-Unity Component that uses a Spine.AnimationState to animate its skeleton.</summary>
|
/// <summary>A Spine-Unity Component that uses a Spine.AnimationState to animate its skeleton.</summary>
|
||||||
public interface IAnimationStateComponent {
|
public interface IAnimationStateComponent : ISpineComponent {
|
||||||
/// <summary>Gets the Spine.AnimationState of the animated Spine Component. This is equivalent to SkeletonAnimation.state.</summary>
|
/// <summary>Gets the Spine.AnimationState of the animated Spine Component. This is equivalent to SkeletonAnimation.state.</summary>
|
||||||
AnimationState AnimationState { get; }
|
AnimationState AnimationState { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>A Spine-Unity Component that holds a reference to a SkeletonRenderer.</summary>
|
/// <summary>A Spine-Unity Component that holds a reference to a SkeletonRenderer.</summary>
|
||||||
public interface IHasSkeletonRenderer {
|
public interface IHasSkeletonRenderer : ISpineComponent {
|
||||||
SkeletonRenderer SkeletonRenderer { get; }
|
SkeletonRenderer SkeletonRenderer { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>A Spine-Unity Component that holds a reference to an ISkeletonComponent.</summary>
|
/// <summary>A Spine-Unity Component that holds a reference to an ISkeletonComponent.</summary>
|
||||||
public interface IHasSkeletonComponent {
|
public interface IHasSkeletonComponent : ISpineComponent {
|
||||||
ISkeletonComponent SkeletonComponent { get; }
|
ISkeletonComponent SkeletonComponent { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -75,7 +75,7 @@ namespace Spine.Unity.Playables {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void HandlePause (Playable playable) {
|
protected void HandlePause (Playable playable) {
|
||||||
if (animationStateComponent == null) return;
|
if (animationStateComponent.IsNullOrDestroyed()) return;
|
||||||
|
|
||||||
TrackEntry current = animationStateComponent.AnimationState.GetCurrent(trackIndex);
|
TrackEntry current = animationStateComponent.AnimationState.GetCurrent(trackIndex);
|
||||||
if (current != null && current == timelineStartedTrackEntry) {
|
if (current != null && current == timelineStartedTrackEntry) {
|
||||||
@ -86,7 +86,7 @@ namespace Spine.Unity.Playables {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void HandleResume (Playable playable) {
|
protected void HandleResume (Playable playable) {
|
||||||
if (animationStateComponent == null) return;
|
if (animationStateComponent.IsNullOrDestroyed()) return;
|
||||||
|
|
||||||
TrackEntry current = animationStateComponent.AnimationState.GetCurrent(trackIndex);
|
TrackEntry current = animationStateComponent.AnimationState.GetCurrent(trackIndex);
|
||||||
if (current != null && current == pausedTrackEntry) {
|
if (current != null && current == pausedTrackEntry) {
|
||||||
@ -95,7 +95,7 @@ namespace Spine.Unity.Playables {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void HandleClipEnd () {
|
protected void HandleClipEnd () {
|
||||||
if (animationStateComponent == null) return;
|
if (animationStateComponent.IsNullOrDestroyed()) return;
|
||||||
|
|
||||||
var state = animationStateComponent.AnimationState;
|
var state = animationStateComponent.AnimationState;
|
||||||
if (endAtClipEnd &&
|
if (endAtClipEnd &&
|
||||||
@ -116,7 +116,7 @@ namespace Spine.Unity.Playables {
|
|||||||
var skeletonGraphic = playerData as SkeletonGraphic;
|
var skeletonGraphic = playerData as SkeletonGraphic;
|
||||||
animationStateComponent = playerData as IAnimationStateComponent;
|
animationStateComponent = playerData as IAnimationStateComponent;
|
||||||
var skeletonComponent = playerData as ISkeletonComponent;
|
var skeletonComponent = playerData as ISkeletonComponent;
|
||||||
if (animationStateComponent == null || skeletonComponent == null) return;
|
if (animationStateComponent.IsNullOrDestroyed() || skeletonComponent == null) return;
|
||||||
|
|
||||||
var skeleton = skeletonComponent.Skeleton;
|
var skeleton = skeletonComponent.Skeleton;
|
||||||
var state = animationStateComponent.AnimationState;
|
var state = animationStateComponent.AnimationState;
|
||||||
@ -226,7 +226,7 @@ namespace Spine.Unity.Playables {
|
|||||||
SkeletonAnimation skeletonAnimation, SkeletonGraphic skeletonGraphic) {
|
SkeletonAnimation skeletonAnimation, SkeletonGraphic skeletonGraphic) {
|
||||||
|
|
||||||
if (Application.isPlaying) return;
|
if (Application.isPlaying) return;
|
||||||
if (skeletonComponent == null || animationStateComponent == null) return;
|
if (animationStateComponent.IsNullOrDestroyed() || skeletonComponent == null) return;
|
||||||
|
|
||||||
int inputCount = playable.GetInputCount();
|
int inputCount = playable.GetInputCount();
|
||||||
int lastNonZeroWeightTrack = -1;
|
int lastNonZeroWeightTrack = -1;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user