AnyPortrait > 스크립트 > 애니메이션
애니메이션을 스크립트로 재생할 수 있습니다.
애니메이션 클립 이름을 파라미터로 입력하면 자동으로 거기에 맞는 루트 유닛(Root Unit)로 전환이 됩니다.
다수의 애니메이션 클립을 레이어를 구분하여 동시에 재생할 수 있습니다.
애니메이션 전환시 페이드 효과를 줄 수 있습니다.
애니메이션 클립을 바로 재생합니다.
대기 시간이나 페이드 효과가 없이 바로 재생이 시작됩니다.
PlayAt 함수를 이용하면 특정 프레임에서 재생을 시작할 수 있습니다.
string animClipName : 애니메이션 클립 이름
apAnimPlayData animPlayData : 대상이 되는 애니메이션 데이터
int frame : PlayAt 함수에서 시작하고자 하는 프레임
int layer : 애니메이션이 재생되는 레이어 (기본값 0)
apAnimPlayUnit.BLEND_METHOD blendMethod : 레이어된 애니메이션 블렌드 방식 (기본값 BLEND_METHOD.Interpolation)
apAnimPlayManager.PLAY_OPTION playOption : 재생 중인 다른 애니메이션 종료 방식 (기본값 PLAY_OPTION.StopSameLayer)
bool isAutoEndIfNotloop : Loop 옵션이 없는 애니메이션 클립일 경우 자동으로 종료시킬 것인지 여부 (기본값 false)
apAnimPlayData : 재생되는 애니메이션 클립 정보 (요청한 애니메이션 클립이 없으면 null)
현재 요청된 레이어에서 재생된 애니메이션 클립이 종료되면 뒤이어서 바로 재생이 됩니다.
레이어에 재생 중인 애니메이션이 없다면 바로 재생이 시작됩니다.
재생 중인 애니메이션 클립이 Loop 옵션이 있어서 종료되지 않는다면 함수는 처리되지 않고 무시됩니다.
PlayQueuedAt 함수를 이용하면 특정 프레임에서 재생을 시작할 수 있습니다.
(PLAY_OPTION playOption을 제외하고 Play, PlayAt 함수와 동일)
apAnimPlayData : 재생되는 애니메이션 클립 정보 (요청한 애니메이션 클립이 없거나 재생 중인 애니메이션이 Loop면 null)
애니메이션 클립을 페이드 효과를 포함하여 재생을 합니다.
Play 함수와 유사하지만 fadeTime 만큼 페이드 효과가 추가되어 서서히 자연스럽게 시작합니다.
CrossFadeAt 함수를 이용하면 특정 프레임에서 재생을 시작할 수 있습니다.
float fadeTime : 애니메이션이 서서히 변하는 페이드 효과가 적용되는 시간 (기본값 0.3f)
(나머지는 Play, PlayAt 함수와 동일)
apAnimPlayData : 재생되는 애니메이션 클립 정보 (요청한 애니메이션 클립이 없으면 null)
PlayQueued와 마찬가지로 재생 중인 애니메이션이 종료되면 이어서 재생합니다.
종료 시간을 기준으로 fadeTime 만큼 페이드 효과가 추가되어 재생이 시작됩니다.
CrossFadeQueuedAt 함수를 이용하면 특정 프레임에서 재생을 시작할 수 있습니다.
(PLAY_OPTION playOption을 제외하고 CrossFade, CrossFadeAt 함수와 동일)
apAnimPlayData : 재생되는 애니메이션 클립 정보. (요청한 애니메이션 클립이 없거나 재생 중인 애니메이션이 Loop면 null)
요청한 레이어의 모든 애니메이션을 종료합니다.
int layer : 종료할 레이어
float fadeTime : 애니메이션이 서서히 페이드되서 종료되는 시간 (기본값 0)
모든 애니메이션을 종료합니다.
float fadeTime : 애니메이션이 서서히 페이드되서 종료되는 시간 (기본값 0)
요청한 레이어의 모든 애니메이션을 일시 정지합니다.
int layer : 일시 정지할 레이어
모든 애니메이션을 일시 정지합니다.
요청한 레이어의 일시 정지된 애니메이션들을 다시 재생합니다.
int layer : 다시 재생할 레이어
모든 일시 정지된 애니메이션들을 다시 재생합니다.
요청한 애니메이션 클립이 재생 중인지 확인합니다.
string animClipName : 조회하고자 하는 애니메이션 클립 이름
bool : 애니메이션이 재생되는 중이라면 true를 리턴 (재생 중이 아니거나 존재하지 않는다면 false 리턴)
애니메이션을 재생하는 매니저입니다.
내부에서 재생, 정지 등을 모두 제어합니다.
Bake된 애니메이션 클립 정보를 참조할 수 있습니다.
public List<apAnimPlayData> PlayDataList : 애니메이션 클립 정보를 담은 리스트
애니메이션 이벤트를 받을 리스너를 등록합니다.
애니메이션 이벤트를 만들고 호출하는 방법은 관련 페이지를 참고하세요.
MonoBehaviour listenerObject : 애니메이션 이벤트가 호출될 MonoBehaviour 객체
애니메이션의 재생 속도를 설정합니다.
기본값은 1.0f이며, 음수를 설정할 수도 있습니다.
다른 함수와 마찬가지로 메카님을 사용할 경우 동작하지 않습니다.
animClipName을 지정하지 않으면 모든 애니메이션의 속도를 일괄적으로 설정합니다.
string animClipName : 속도를 설정할 애니메이션 클립의 이름. 설정하지 않을 경우 모든 애니메이션 클립을 대상으로 함
float speed : 재생 속도 비율. 기본값은 1.0f
모든 애니메이션의 재생 속도를 기본값으로 되돌립니다.
애니메이션의 재생 정보를 가진 apAnimPlayData에 대한 리스트를 리턴합니다.
재생 가능한 애니메이션 정보들을 바로 조회할 수 있습니다.
List<apAnimPlayData> : 재생 가능한 apAnimPlayData의 리스트
애니메이션 재생 정보를 가진 apAnimPlayData 객체를 이름으로 조회합니다.
string animClipName : 조회하고자 하는 애니메이션 클립 이름
apAnimPlayData : 재생 가능한 apAnimPlayData 객체. 없으면 null 리턴
이름을 통해서 애니메이션의 재생 상태를 조회합니다.
"재생되지 않은 상태(None), 재생 중(Playing), 일시 정지 됨(Paused), 마지막 프레임에 도달함(Ended)"의 결과 값이 Enum 형식으로 리턴됩니다.
IsPlaying() 함수보다 더 세분화된 상태 값을 제공합니다.
string animClipName : 조회하고자 하는 애니메이션 클립 이름
apAnimPlayData.AnimationPlaybackStatus : 애니메이션의 재생 상태
Play, PlayQueued 등의 함수에 포함된 파라미터 중 Blend Method와 Play Option의 각 값에 대한 설명입니다.
apAnimPlayUnit.BLEND_METHOD blendMethod : 레이어된 애니메이션 블렌드 방식
BLEND_METHOD.Interpolation : 낮은 레이어의 애니메이션과 비교하여 덮어쓰기 보간 방식으로 병합합니다.
BLEND_METHOD.Additive : 낮은 레이어의 애니메이션에 값을 더하며 병합합니다.
apAnimPlayManager.PLAY_OPTION playOption : 재생 중인 다른 애니메이션 종료 방식
PLAY_OPTION.StopSameLayer : 요청된 레이어의 애니메이션만 종료합니다.
PLAY_OPTION.StopAllLayers : 다른 레이어를 포함한 모든 애니메이션을 종료합니다.
애니메이션 재생 함수를 호출하면 리턴되는 클래스입니다.
apAnimPlayData는 애니메이션 재생 정보를 가지고 있습니다.
리턴된 apAnimPlayData 인스턴스의 함수를 이용하여 속도를 제어할 수 있습니다.
예시) portrait.Play("Idle").SetSpeed(2);
public void SetSpeed(float speed)
: speed 만큼 속도를 제어합니다. 기본값은 1.0f이며 음수도 가능합니다.
public AnimationPlaybackStatus PlaybackStatus
: 현재 재생 상태를 리턴합니다. 재생 상태는 다음의 값을 가집니다.
- AnimationPlaybackStatus.None : 유효하지 않은 데이터이거나 현재 재생 중이 아닙니다.
- AnimationPlaybackStatus.Playing : 재생 중입니다.
- AnimationPlaybackStatus.Paused : 재생이 되었으나 현재 일시 정지된 상태입니다.
- AnimationPlaybackStatus.Ended : Loop 애니메이션이 아닐 때, 마지막 프레임에 도달한 상태 입니다.
public string Name
: 애니메이션 클립의 이름입니다.
public int CurrentFrame
: 재생되는 현재의 프레임입니다. 정수값으로 리턴이 되지만, 내부적으로는 실수(Float)의 값으로 연산이 됩니다. 애니메이션이 유효한 상태가 아니라면 -1이 리턴됩니다.
public int StartFrame
: 이 애니메이션의 시작 프레임입니다. 유효하지 않다면 -1이 리턴됩니다.
public int EndFrame
: 이 애니메이션의 마지막 프레임입니다. 유효하지 않다면 -1이 리턴됩니다.
public float NormalizedTime
: 애니메이션이 전체 애니메이션 길이에 비해 얼마나 재생되었는지를 0.0~1.0 사이의 값으로 리턴합니다. 유효하지 않은 애니메이션의 경우 -1이 리턴됩니다.
using UnityEngine;
using AnyPortrait;
public class AnimationTest : MonoBehaviour
{
// Target AnyPortrait Object
public apPortrait portrait;
void Start () { }
void Update ()
{
// CrossFade "Idle" Animation Clip
if(Input.GetKeyDown(KeyCode.I))
{
if(portrait.CrossFade("Idle", 0.4f) == null)
{
Debug.LogError("Faild [Idle]");
}
Debug.Log("CrossFade [Idle]");
}
// Play "Action" Animation Clip
if(Input.GetKeyDown(KeyCode.A))
{
if(portrait.Play("Action") == null)
{
Debug.LogError("Faild [Action]");
}
Debug.Log("Play [Action]");
}
// Pause Animations in All Layers
if(Input.GetKeyDown(KeyCode.P))
{
portrait.PauseAll();
Debug.Log("Pause All");
}
// Stop Animations in All Layers
if(Input.GetKeyDown(KeyCode.S))
{
portrait.StopAll(0.3f);
Debug.Log("Stop All");
}
// Resume Animations in All Layers
if(Input.GetKeyDown(KeyCode.R))
{
portrait.ResumeAll();
Debug.Log("Resume All");
}
}
}