예제 #1
0
//		float CheckValue (float value, float x, float y)
//		{
//			float min;
//			float max;
//			if (x > y) {
//				min = y;
//				max = x;
//			} else {
//				min = x;
//				max = y;
//			}
//			value = Mathf.Clamp (value, min, max);
//			return value;
//		}

        #endregion

        #region Character

        void PlayCharacterAnimation(CCAnimationData animData)
        {
            if (animData != m_CurRole.Animation.CurrAnimData)
            {
                m_CurRole.Animation.Play(animData);
            }
        }
 void Update()
 {
     if (CCInput.GetKeyDown(KeyCode.P) && TestAnimation != "")
     {
         CCAnimationData data = new CCAnimationData(TestAnimation);
         Play(data);
     }
 }
 public IEnumerator StartPlay(CCAnimationData pAnimData)
 {
     if (pAnimData == null)
     {
         yield break;
     }
     Stop();
     m_PlayAnimationList.Clear();
     m_Coroutine = StartCoroutine(CoroutinePlay(pAnimData));
     yield return(m_Coroutine);
 }
예제 #4
0
    public CCAnimationData Clone()
    {
        var CCAnimationData = new CCAnimationData();

        CCAnimationData.AnimName       = this.AnimName;
        CCAnimationData.Audio          = this.Audio;
        CCAnimationData.mWrapMode      = this.mWrapMode;
        CCAnimationData.normalizedTime = this.normalizedTime;
        CCAnimationData.AssetsPath     = this.AssetsPath;
        CCAnimationData.Key            = this.Key;
        return(CCAnimationData);
    }
    public float GetAnimatinClipLength(CCAnimationData pAnimData)
    {
        AnimationClip animClip = GetAnimationClip(pAnimData.AnimName);

        if (animClip == null)
        {
            return(0);
        }

        float animLength = animClip.length * (1 - pAnimData.normalizedTime) / animator.speed;

        return(animLength);
    }
    public void Play(CCAnimationData pAnimData)
    {
        if (gameObject.activeInHierarchy == false)
        {
            return;
        }
        if (pAnimData == null)
        {
            return;
        }
        Stop();

        m_Coroutine = StartCoroutine(CoroutinePlay(pAnimData));
        m_PlayAnimationList.Clear();
    }
    public void SwitchAnimation()
    {
        if (gameObject.activeInHierarchy == false)
        {
            return;
        }
        if (m_AniData == null)
        {
            return;
        }
        CCAnimationData pAnimData = m_AniData.GetNextAnimData();

        if (pAnimData != null)
        {
            Play(pAnimData);
        }
    }
    public void PlayList(List <CCAnimationData> list)
    {
        if (list == null || list.Count == 0)
        {
            return;
        }
        m_PlayAnimationList = list;
        CCAnimationData pAnimData = list[0];

        if (pAnimData == null)
        {
            m_PlayAnimationList.Clear();
            return;
        }

        Stop();
        m_Coroutine = StartCoroutine(CoroutinePlay(pAnimData));
        m_PlayAnimationList.RemoveAt(0);
    }
    public void AddOverrideClip(CCAnimationData pAnimData)
    {
        string tAnimPath     = pAnimData.AssetsPath;
        string tAnimClipName = pAnimData.AnimName;

        if (tAnimPath.IsNullOrEmpty() || tAnimClipName.IsNullOrEmpty())
        {
            return;
        }
        var mAnimationClips = Resources.LoadAll <AnimationClip> (tAnimPath);

        if (mAnimationClips.Length <= 0)
        {
            return;
        }

        AnimationClip targetClip    = null;
        bool          tOverrideClip = false;

        mAnimationClips.ForEach(item =>
        {
            if (item.name == tAnimClipName)
            {
                (m_AnimatorControl as AnimatorOverrideController)[stanceAnimStateName] = item;
                targetClip    = item;
                tOverrideClip = true;
            }
        });

        if (tOverrideClip)
        {
            Resources.UnloadUnusedAssets();
            m_ClipDict = new Dictionary <string, AnimationClip>();
            foreach (var clip in m_AnimatorControl.animationClips)
            {
                m_ClipDict.Add(clip.name, clip);
            }
        }
    }
    /// <summary>
    /// dynamic loading animClip
    /// </summary>
    /// <param name="pAnimData"></param>
    /// <param name="clip"></param>
    /// <returns></returns>
    bool OverrideAnimatorControllerClip(CCAnimationData pAnimData, ref AnimationClip clip)
    {
        string tAnimPath     = pAnimData.AssetsPath;
        string tAnimClipName = pAnimData.AnimName;

        if (tAnimPath.IsNullOrEmpty() || tAnimClipName.IsNullOrEmpty())
        {
            return(false);
        }
        var mAnimationClips = Resources.LoadAll <AnimationClip> (tAnimPath);

        if (mAnimationClips.Length <= 0)
        {
            return(false);
        }

        AnimationClip targetClip    = null;
        bool          tOverrideClip = false;

        mAnimationClips.ForEach(item => {
            if (item.name == tAnimClipName)
            {
                (m_AnimatorControl as AnimatorOverrideController)[stanceAnimStateName] = item;
                targetClip    = item;
                tOverrideClip = true;
            }
        });

        clip = targetClip;

        if (!tOverrideClip)
        {
            return(false);
        }
        Resources.UnloadUnusedAssets();
        return(true);
    }
    /// <summary>
    /// Modify support AnimationOverrideController dynamic loading animClip;
    /// </summary>
    /// <param name="pAnimData"></param>
    /// <returns></returns>
    IEnumerator CoroutinePlay(CCAnimationData pAnimData)
    {
        m_CurrAnimData = pAnimData;
        AnimationClip animClip = GetAnimationClip(pAnimData.AnimName);

        string animName = pAnimData.AnimName;

        if (animClip == null)
        {
            if (m_AnimatorControl is AnimatorOverrideController)
            {
                if (OverrideAnimatorControllerClip(pAnimData, ref animClip))
                {
                    animName = stanceAnimStateName;
                }
                else
                {
                    yield break;
                }
            }
            else
            {
                Debug.LogError("Animation lost : " + animName);
                yield break;
            }
        }

        _CurPlayingClip = animClip;
        if (m_OnPlayAnimation != null)
        {
            m_OnPlayAnimation(pAnimData);
        }

        if (m_CrossEnable)
        {
            animator.CrossFade(animName, 0.1f, 0, pAnimData.normalizedTime);
        }
        else
        {
            animator.Play(animName, 0, pAnimData.normalizedTime);
        }

                #if UNITY_EDITOR
        if (m_LogEnable)
        {
            Debug.Log(Time.time + " - pAnimData : " + animName);
        }
                #endif

        if (m_SoundEnable)
        {
            CocoAudio.StopOnTarget(gameObject);
            CocoAudio.PlayOnTarget(gameObject, pAnimData.Audio);
        }
        float animLength = animClip.length * (1 - pAnimData.normalizedTime) / animator.speed;
        switch (pAnimData.mWrapMode)
        {
        case WrapMode.Loop:
            while (true)
            {
                yield return(new WaitForSeconds(animLength));

                if (m_SoundEnable)
                {
                    CocoAudio.PlayOnTarget(gameObject, pAnimData.Audio);
                }
            }
            break;

        case WrapMode.ClampForever:
            yield return(new WaitForSeconds(animLength));

            while (true)
            {
                yield return(new WaitForEndOfFrame());
            }
            break;

        default:                    // Clamp
            yield return(new WaitForSeconds(animLength));

            break;
        }

        m_CurrAnimData = null;
        if (m_PlayAnimationList != null && m_PlayAnimationList.Count > 0)
        {
            PlayList(m_PlayAnimationList);
        }
        else if (m_AutoSwitchEanble)
        {
            SwitchAnimation();
        }

        if (m_OnFinishAnimation != null)
        {
            m_OnFinishAnimation(pAnimData);
        }
    }
    public void Play(string aniName)
    {
        CCAnimationData data = new CCAnimationData(aniName);

        Play(data);
    }
 public void SetStanbyData(CCAnimationData _StandBy)
 {
     Basic_StandBy = _StandBy;
 }