Exemplo n.º 1
0
    public void AddClip(AnimationClip clip, string newName, float speed, WrapMode wrapMode, float length)
    {
        if (GetAnimationData(newName) != null)
        {
            Debug.LogWarning("An animation with the name '" + newName + "' already exists.");
        }
        MecanimAnimationData animData = new MecanimAnimationData();

        animData.clip = (AnimationClip)Instantiate(clip);
        if (wrapMode == WrapMode.Default)
        {
            wrapMode = defaultWrapMode;
        }
        animData.clip.wrapMode = wrapMode;
        animData.clip.name     = newName;
        animData.clipName      = newName;
        animData.speed         = speed;
        animData.originalSpeed = speed;
        animData.length        = length;
        animData.wrapMode      = wrapMode;

        List <MecanimAnimationData> animationDataList = new List <MecanimAnimationData>(animations);

        animationDataList.Add(animData);
        animations = animationDataList.ToArray();
    }
Exemplo n.º 2
0
    public void SetWrapMode(AnimationClip clip, WrapMode wrapMode)
    {
        MecanimAnimationData animData = GetAnimationData(clip);

        animData.wrapMode      = wrapMode;
        animData.clip.wrapMode = wrapMode;
    }
Exemplo n.º 3
0
    public void SetWrapMode(string clipName, WrapMode wrapMode)
    {
        MecanimAnimationData animData = GetAnimationData(clipName);

        animData.wrapMode      = wrapMode;
        animData.clip.wrapMode = wrapMode;
    }
Exemplo n.º 4
0
    public void SetSpeed(MecanimAnimationData animData, float speed)
    {
        if (animData != null)
        {
            animData.normalizedSpeed = speed / animData.originalSpeed;

            animData.speed = speed;
            if (IsPlaying(animData))
            {
                SetSpeed(speed);
            }
        }
    }
Exemplo n.º 5
0
 public void SetNormalizedSpeed(MecanimAnimationData animData, float normalizedSpeed)
 {
     if (animData == null)
     {
         return;
     }
     animData.normalizedSpeed = normalizedSpeed;
     animData.speed           = animData.originalSpeed * animData.normalizedSpeed;
     if (IsPlaying(animData))
     {
         SetSpeed(animData.speed);
     }
 }
Exemplo n.º 6
0
 public void CopyAnimationData(MecanimAnimationData from, ref MecanimAnimationData to)
 {
     if (from == null || from.clip == null)
     {
         return;
     }
     to.clip               = (AnimationClip)Instantiate(from.clip);
     to.clip.wrapMode      = from.clip.wrapMode;
     to.clip.name          = from.clip.name;
     to.clipName           = from.clipName;
     to.speed              = from.speed;
     to.transitionDuration = from.transitionDuration;
     to.wrapMode           = from.wrapMode;
     to.applyRootMotion    = from.applyRootMotion;
     to.timesPlayed        = from.timesPlayed;
     to.secondsPlayed      = from.secondsPlayed;
     to.length             = from.length;
     to.originalSpeed      = from.originalSpeed;
     to.normalizedSpeed    = from.normalizedSpeed;
     to.normalizedTime     = from.normalizedTime;
     to.stateName          = from.stateName;
 }
Exemplo n.º 7
0
    public bool IsPlaying(MecanimAnimationData animData, float weight)
    {
        if (animData == null)
        {
            return(false);
        }
        if (currentAnimationData == null)
        {
            return(false);
        }
        if (currentAnimationData == animData && animData.wrapMode == WrapMode.Once && animData.timesPlayed > 0)
        {
            return(false);
        }
        if (currentAnimationData == animData && animData.wrapMode == WrapMode.Clamp && animData.timesPlayed > 0)
        {
            return(false);
        }
        if (currentAnimationData == animData && animData.wrapMode == WrapMode.ClampForever)
        {
            return(true);
        }
        if (currentAnimationData == animData)
        {
            return(true);
        }

        AnimatorClipInfo[] animationInfoArray = animator.GetCurrentAnimatorClipInfo(0);
        foreach (AnimatorClipInfo animationInfo in animationInfoArray)
        {
            if (animData.clip == animationInfo.clip && animationInfo.weight >= weight)
            {
                return(true);
            }
        }
        return(false);
    }
Exemplo n.º 8
0
    void Start()
    {
        if (defaultAnimation.clip == null && animations.Length > 0)
        {
            SetDefaultClip(animations[0].clip, "State1", animations[0].speed, animations[0].wrapMode, false);
        }

        if (defaultAnimation.clip != null && currentAnimationData == null)
        {
            foreach (MecanimAnimationData animData in animations)
            {
                if (animData.clip == defaultAnimation.clip)
                {
                    defaultAnimation.clip = (AnimationClip)Instantiate(defaultAnimation.clip);
                }
            }

            currentAnimationData           = defaultAnimation;
            currentAnimationData.stateName = "State1";
            currentAnimationData.length    = currentAnimationData.clip.length;

            AnimatorOverrideController overrideController = new AnimatorOverrideController();
            overrideController.runtimeAnimatorController = controller;
            overrideController["Default"] = currentAnimationData.clip;
            overrideController["State1"]  = currentAnimationData.clip;

            animator.runtimeAnimatorController = overrideController;
            animator.Play("State1", 0, 0);

            if (overrideRootMotion)
            {
                animator.applyRootMotion = currentAnimationData.applyRootMotion;
            }
            SetSpeed(currentAnimationData.speed);
        }
    }
Exemplo n.º 9
0
 public bool IsPlaying(MecanimAnimationData animData)
 {
     return(currentAnimationData == animData);
 }
Exemplo n.º 10
0
 public void Play(MecanimAnimationData animationData, Fix64 blendingTime, Fix64 normalizedTime, bool mirror)
 {
     _playAnimation(animationData, blendingTime, normalizedTime, mirror);
     //DirectorPlay(animationData, blendingTime, normalizedTime, mirror);
 }
Exemplo n.º 11
0
 public float GetSpeed(MecanimAnimationData animData)
 {
     return(animData.speed);
 }
Exemplo n.º 12
0
 public void Play(MecanimAnimationData animationData)
 {
     _playAnimation(animationData, animationData.transitionDuration, 0, currentMirror);
 }
Exemplo n.º 13
0
 public void Play(MecanimAnimationData animationData, bool mirror)
 {
     _playAnimation(animationData, animationData.transitionDuration, 0, mirror);
 }
Exemplo n.º 14
0
    public void OnPlayAnimation(MecanimAnimationData targetAnimationData, float blendingTime, float nomalizedTime, bool mirror)
    {
        if (targetAnimationData == null || targetAnimationData.clip == null)
        {
            return;
        }

        bool prevMirror = currentMirror;

        currentMirror = mirror;

        float animSpeed = targetAnimationData.originalSpeed * (targetAnimationData.originalSpeed < 0 ? -1 : 1);

        currentNomalizedTime = GetCurrentClipPosition();
        currentState         = "State1";

        if (!mirror)
        {
            if (targetAnimationData.originalSpeed >= 0)
            {
                currentState = "State1";
            }
            else
            {
                currentState = "State2";
            }
        }
        else
        {
            if (targetAnimationData.originalSpeed >= 0)
            {
                currentState = "State3";
            }
            else
            {
                currentState = "State4";
            }
        }

        overrideController = new AnimatorOverrideController();
        overrideController.runtimeAnimatorController = null;
        overrideController.runtimeAnimatorController = controller;

        if (currentAnimationData != null && currentAnimationData.clip != null)
        {
            overrideController["Default"] = null;
            overrideController["Default"] = currentAnimationData.clip;
        }

        overrideController[currentState] = null;
        overrideController[currentState] = targetAnimationData.clip;

        if (blendingTime == -1)
        {
            blendingTime = defaultTransitionDuration;
        }

        if (blendingTime <= 0 || currentAnimationData == null)
        {
            animator.runtimeAnimatorController = null;
            animator.runtimeAnimatorController = overrideController;
            animator.Play(currentState, 0, nomalizedTime);
        }
        else
        {
            animator.runtimeAnimatorController = null;
            animator.runtimeAnimatorController = overrideController;

            currentAnimationData.stateName = "Default";
            SetCurrentClipPosition(currentNomalizedTime);

            animator.Play("Default", 0, nomalizedTime);
            animator.CrossFade(currentState, (blendingTime / animSpeed), 0, nomalizedTime);
        }

        AnimatorStateInfo info = animator.GetCurrentAnimatorStateInfo(0);

        if (info.IsName("Default"))
        {
            if (animator.GetBool("Mirror") != prevMirror)
            {
                animator.SetBool("Mirror", prevMirror);
            }
        }
        animator.Update(0);

        targetAnimationData.timesPlayed   = 0;
        targetAnimationData.secondsPlayed = (nomalizedTime * targetAnimationData.length) / animSpeed;
        targetAnimationData.nomalizedTime = nomalizedTime;
        targetAnimationData.speed         = targetAnimationData.originalSpeed;

        SetSpeed(targetAnimationData.originalSpeed);

        if (currentAnimationData != null)
        {
            currentAnimationData.speed         = currentAnimationData.originalSpeed;
            currentAnimationData.nomalizedTime = 1;
            currentAnimationData.timesPlayed   = 0;
        }

        currentAnimationData           = targetAnimationData;
        currentAnimationData.stateName = currentState;
    }
Exemplo n.º 15
0
 public Fix64 GetSpeed(MecanimAnimationData animData)
 {
     return(animData.speed);
 }
Exemplo n.º 16
0
 public void SetWrapMode(MecanimAnimationData animationData, WrapMode wrapMode)
 {
     animationData.wrapMode      = wrapMode;
     animationData.clip.wrapMode = wrapMode;
 }
Exemplo n.º 17
0
 public void Play(MecanimAnimationData animationData, float blendingTime, float normalizedTime, bool mirror)
 {
     _playAnimation(animationData, blendingTime, normalizedTime, mirror);
 }
Exemplo n.º 18
0
    private void _playAnimation(MecanimAnimationData targetAnimationData, float blendingTime, float normalizedTime, bool mirror)
    {
        //The overrite machine. Creates an overrideController, replace its core animations and restate it back in
        if (targetAnimationData == null || targetAnimationData.clip == null)
        {
            return;
        }

        bool prevMirror = currentMirror;

        currentMirror = mirror;

        float animSpeed = targetAnimationData.originalSpeed * (targetAnimationData.originalSpeed < 0 ? -1 : 1);

        currentNormalizedTime = GetCurrentClipPosition();
        currentState          = "State1";

        if (!mirror)
        {
            if (targetAnimationData.originalSpeed >= 0)
            {
                currentState = "State1";
            }
            else
            {
                currentState = "State2";
            }
        }
        else
        {
            if (targetAnimationData.originalSpeed >= 0)
            {
                currentState = "State3";
            }
            else
            {
                currentState = "State4";
            }
        }


        overrideController = new AnimatorOverrideController();
        overrideController.runtimeAnimatorController = controller;

        if (currentAnimationData != null && currentAnimationData.clip != null)
        {
            overrideController["Default"] = currentAnimationData.clip;
        }

        overrideController[currentState] = targetAnimationData.clip;

        if (blendingTime == -1)
        {
            blendingTime = currentAnimationData.transitionDuration;
        }
        if (blendingTime == -1)
        {
            blendingTime = defaultTransitionDuration;
        }

        if (blendingTime <= 0 || currentAnimationData == null)
        {
            animator.runtimeAnimatorController = overrideController;
            animator.Play(currentState, 0, normalizedTime);
        }
        else
        {
            animator.runtimeAnimatorController = overrideController;

            currentAnimationData.stateName = "Default";
            SetCurrentClipPosition(currentNormalizedTime);

            animator.Play("Default", 0, normalizedTime);
            animator.CrossFade(currentState, (blendingTime / animSpeed), 0, normalizedTime);
        }

        // Update Previous Mirror
        AnimatorStateInfo info = animator.GetCurrentAnimatorStateInfo(0);

        if (info.IsName("Default"))
        {
            if (animator.GetBool("Mirror") != prevMirror)
            {
                animator.SetBool("Mirror", prevMirror);
            }
        }
        animator.Update(0);

        targetAnimationData.timesPlayed    = 0;
        targetAnimationData.secondsPlayed  = (normalizedTime * targetAnimationData.length) / animSpeed;
        targetAnimationData.normalizedTime = normalizedTime;
        targetAnimationData.speed          = targetAnimationData.originalSpeed;

        if (overrideRootMotion)
        {
            animator.applyRootMotion = targetAnimationData.applyRootMotion;
        }
        SetSpeed(targetAnimationData.originalSpeed);

        if (currentAnimationData != null)
        {
            currentAnimationData.speed           = currentAnimationData.originalSpeed;
            currentAnimationData.normalizedSpeed = 1;
            currentAnimationData.timesPlayed     = 0;
        }

        currentAnimationData           = targetAnimationData;
        currentAnimationData.stateName = currentState;

        if (MecanimControl.OnAnimationBegin != null)
        {
            MecanimControl.OnAnimationBegin(currentAnimationData);
        }
    }
Exemplo n.º 19
0
 public void RestoreAnimatorData(MecanimAnimationData animData, float normalizedTime)
 {
     currentAnimationData = animData;
     currentAnimationData.normalizedTime = normalizedTime;
     currentAnimationData.secondsPlayed  = (normalizedTime * currentAnimationData.length) / currentAnimationData.speed;
 }
Exemplo n.º 20
0
 public float GetNormalizedSpeed(MecanimAnimationData animData)
 {
     return(animData.normalizedSpeed);
 }
Exemplo n.º 21
0
 public void CrossFade(MecanimAnimationData animationData, Fix64 blendingTime, Fix64 normalizedTime, bool mirror)
 {
     Play(animationData, blendingTime, normalizedTime, mirror);
 }