모션에 관하여

모션을 재생하기 위한 과정

1. 모션 클래스
a. 인스턴스 생성 (mtn 파일 불러오기)
b. 설정

2. 모션 관리 클래스
a. 인스턴스 생성
b. 모션 생성
c. 모델 파라미터 갱신
d. 모션 종료



1-a. 모션 인스턴스 생성 (mtn 파일 불러오기)

모션을 제어하기 위해서는 Live2DMotion 라는 클래스를 이용합니다.
모션 정보를 담고 있는 데이터 파일의 확장자는 「.mtn」입니다.
이 .mtn 모션 데이터를 불러오기 위해서는 loadMotion함수를 호출합니다.
대부분의 플랫폼에서는 파일 경로를 받아 불러오는 방법과 바이트 배열을 받아 불러오는 방법, 이렇게 두 가지 불러오기 방법이 제공됩니다.


Live2DMotion motion = Live2DMotion::loadMotion( path );

혹은

Live2DMotion motion = Live2DMotion::loadMotion( byteArray, size );

와 같은 방법으로 불러올 수 있습니다.



1-b. 모션 설정

모션 클래스는 아래와 같은 항목들을 설정할 수 있습니다.
물론 아래의 설정들을 수행하지 않은채로도 모션을 재생할 수도 있습니다.

* 모션이 시작될 때의 페이드인 시간
setFadeIn함수로 페이드인 시간을 설정, getFadeIn함수로 페이드인 시간을 가져올 수 있습니다.
페이드인 시간은 밀리초(ms) 단위로 지정할 수 있습니다. 페이드 시간에 관하여.
설정하지 않은 경우에 기본 값은 1000 (1초)입니다.

* 모션이 종료될 때 페이드아웃 시간
setFadeOut함수로 페이드아웃 시간을 설정, getFadeOut함수로 페이드아웃 시간을 가져올 수 있습니다.
페이드아웃 시간 또한 밀리초(ms) 단위로 지정할 수 있습니다.
설정하지 않은 경우에 기본 값은 1000 (1초)입니다.

* 반복 재생 ON/OFF
setLoop함수로 반복 재생 여부를 설정, isLoop함수로 반복 재생 여부를 가져올 수 있습니다.
true로 설정하였을 경우 모션 재생이 종료된 이후 다시 처음부터 다시 재생합니다.
도중에 다른 모션 재생을 재생하거나 정지 시키지 않는한 재생은 무한히 반복됩니다.
설정하지 않은 경우 기본 값은 false (반복하지 않음)입니다.

設定例 (※これらの設定はモーションの再生前に行ってください)
motion->setFadeIn( 1000 );//페이드인 시간을 1000ms로 설정
motion->setFadeOut( 1000 );//페이드아웃 시간을 1000ms로 설정
motion->setLoop( true );//반복 재생을 ON


2-a. 모션 관리 클래스 인스턴스 생성

각각의 모션 파일을 불러오고 설정하는 것은 Live2DMotion 클래스를 이용합니다만,
이 모션들을 모델에 (애니메이션을) 적용하기 위해서는 MotionQueueManager 클래스를 이용합니다.

MotionQueueManager motionManager = new MotionQueueManager();//모션 관리 클래스 생성



2-b. 모션 재생

모션 재생에는 MotionQueueManager의 startMotion함수를 이용합니다.

메모리 자동 해제에 관하여 (C++ 전용)
두번째 인수로 모션이 종료되었을 때 메모리를 자동으로 해제할지 여부를 지정할 수 있습니다.
true가 전달되면 Live2D 내부에서 자동으로 delete를 호출하여 Motion의 메모리를 해제합니다.
C++ 이외의 언어에서는 별 상관 없습니다.


motionManager->startMotion( motion, false );//모션 재생



2-c. 모델 파라미터 갱신

startMotion으로 모션을 재생하는 것만으로 모델은 움직이지 않습니다.
현재 재생중인 모션의 파라미터를 모델에 적용하기 위해서는 updateParam함수를 호출해야합니다.
재생 속도 조절과 같은 작업도 가능합니다. 자세

motionManger->updateParam( live2DModel );//모션 갱신




2-d. 모션 종료

모션은 재생 시간이 지나면 자동으로 종료됩니다만
임의의 타이밍에 재생을 종료하고 싶다면 stopAllMotions함수를 호출하면 됩니다.
두 개의 모션이 페이드 인/아웃 되는 상황이 있을 수 있습니다만
어떤 경우에든 관계 없이 완벽히 애니메이션을 종료할 수 있습니다.

motionManger->stopAllMotions();//모션 종료