//------------------------------------------------------------------------- bool SetUnity43SpriteRendererToActiveFrameIndexSprite(ref UnityEngine.SpriteRenderer unity43SpriteRenderer, AnimatedColliderParameters animatedColliderParams, int spriteIndex) { if (animatedColliderParams == null || animatedColliderParams.SpriteFrames == null || animatedColliderParams.SpriteFrames.Length == 0) { return false; } unity43SpriteRenderer.sprite = animatedColliderParams.SpriteFrames[spriteIndex]; return true; }
//------------------------------------------------------------------------- bool ReadUnity43SpriteAnimatorParams(UnityEngine.Animator unity43Animator, ref AnimatedColliderParameters animatedColliderParams, ref RegionIndependentParameters regionIndependentParams) { #if UNITY_5_AND_LATER UnityEditor.Animations.AnimatorController controller = (UnityEditor.Animations.AnimatorController) unity43Animator.runtimeAnimatorController; #else UnityEditorInternal.AnimatorController controller = (UnityEditorInternal.AnimatorController) unity43Animator.runtimeAnimatorController; #endif if (!controller) { regionIndependentParams.NumCollidersNeeded = 1; return false; } // Note: we have to maintain the order to keep the spriteRef and spriteID indices linked. // Thus we don't use a HashSet for duplicate prevention but a list.Contains() call. List<string> spriteIDs = new List<string>(); List<UnityEngine.Sprite> spriteFrames = new List<Sprite>(); AnimationClip[] clips = AnimationUtility.GetAnimationClips(this.gameObject); for (int index = 0; index < clips.Length; ++index) { AnimationClip clip = clips[index]; EditorCurveBinding[] bindings = AnimationUtility.GetObjectReferenceCurveBindings(clip); if (bindings != null) { for (int bindingIndex = 0; bindingIndex < bindings.Length; ++bindingIndex) { EditorCurveBinding binding = bindings[bindingIndex]; if (binding.isPPtrCurve) { ObjectReferenceKeyframe[] references = AnimationUtility.GetObjectReferenceCurve(clip, binding); for (int refIndex = 0; refIndex < references.Length; ++refIndex) { ObjectReferenceKeyframe reference = references[refIndex]; UnityEngine.Sprite spriteRef = (UnityEngine.Sprite) reference.value; if (spriteRef != null) { string spriteID = spriteRef.name; if (!spriteIDs.Contains(spriteID)) { spriteFrames.Add(spriteRef); spriteIDs.Add(spriteID); } } } } } } } animatedColliderParams.SpriteFrames = spriteFrames.ToArray(); animatedColliderParams.ColliderIDStrings = spriteIDs.ToArray(); regionIndependentParams.NumCollidersNeeded = animatedColliderParams.ColliderIDStrings.Length; return true; }