/// <summary> /// AnimClip 이름을 인자로 받아서 애니메이션을 재생한다. /// Fade 타임을 받아서 다른 모든 클립에서 자연스럽게 변환된다. /// </summary> /// <param name="animClipName">Clip 이름. 맞지 않을 경우 처리 실패</param> /// <param name="layer">실행되는 레이어. 0부터 실행되며 최대값은 20</param> /// <param name="blendMethod">다른 레이어와 블렌드시 옵션</param> /// <param name="playOption">StopAllLayer인 경우 요청된 레이어 외의 Clip들이 다음 Clip이 실행되는 순간 같이 종료된다.</param> /// <param name="isAutoEndIfNotloop">[Loop 타입이 아닌 경우] True이면 재생 종료시 자동으로 처리 데이터가 삭제된다.</param> /// <param name="fadeTime">페이드 시간. 기본값은 0.3</param> /// <returns></returns> public apAnimPlayData CrossFade(string animClipName, int layer, apAnimPlayUnit.BLEND_METHOD blendMethod, float fadeTime, PLAY_OPTION playOption = PLAY_OPTION.StopSameLayer, bool isAutoEndIfNotloop = false) { apAnimPlayData playData = GetAnimPlayData_Opt(animClipName); if (playData == null) { Debug.LogError("CrossFade Failed : No AnimClip [" + animClipName + "]"); return(null); } if (layer < MIN_LAYER_INDEX || layer > MAX_LAYER_INDEX) { Debug.LogError("CrossFade Failed : Layer " + layer + " is invalid. Layer must be between " + MIN_LAYER_INDEX + " ~ " + MAX_LAYER_INDEX); return(null); } if (fadeTime < 0.0f) { fadeTime = 0.0f; } apAnimPlayQueue playQueue = _animPlayQueues[layer]; apAnimPlayUnit resultPlayUnit = playQueue.Play(playData, blendMethod, fadeTime, isAutoEndIfNotloop); if (resultPlayUnit == null) { return(null); } //float fadeInTime = resultPlayUnit.FadeInTime; if (playOption == PLAY_OPTION.StopAllLayers) { //다른 레이어를 모두 정지시킨다. - 단, 딜레이를 준다. for (int i = 0; i < _animPlayQueues.Count; i++) { if (i == layer) { continue; } _animPlayQueues[i].StopAll(fadeTime); } } RefreshPlayOrders(); return(playData); }
/// <summary> /// Play the animation /// </summary> /// <param name="animClipName">Name of the Animation Clip</param> /// <param name="layer">The layer to which the animation is applied. From 0 to 20</param> /// <param name="blendMethod">How it is blended with the animation of the lower layers</param> /// <param name="playOption">How to stop which animations</param> /// <param name="isAutoEndIfNotloop">If True, animation that does not play repeatedly is automatically terminated.</param> /// <returns>Animation data to be played. If it fails, null is returned.</returns> public apAnimPlayData Play(apAnimPlayData playData, int layer, apAnimPlayUnit.BLEND_METHOD blendMethod, PLAY_OPTION playOption = PLAY_OPTION.StopSameLayer, bool isAutoEndIfNotloop = false, bool isDebugMsg = true) { if (playData == null) { if (isDebugMsg) { Debug.LogError("Play Failed : Unknown AnimPlayData"); } return(null); } if (layer < MIN_LAYER_INDEX || layer > MAX_LAYER_INDEX) { if (isDebugMsg) { Debug.LogError("Play Failed : Layer " + layer + " is invalid. Layer must be between " + MIN_LAYER_INDEX + " ~ " + MAX_LAYER_INDEX); } return(null); } apAnimPlayQueue playQueue = _animPlayQueues[layer]; apAnimPlayUnit resultPlayUnit = playQueue.Play(playData, blendMethod, 0.0f, isAutoEndIfNotloop); if (resultPlayUnit == null) { return(null); } if (playOption == PLAY_OPTION.StopAllLayers) { //다른 레이어를 모두 정지시킨다. for (int i = 0; i < _animPlayQueues.Count; i++) { if (i == layer) { continue; } _animPlayQueues[i].StopAll(0.0f); } } RefreshPlayOrders(); return(playData); }