유니티 3D 의 애니메이션에서 이벤트 발생하기
애니메이션 실행 중에 특정한 조건이 되면 미리 지정된 함수를 호출하는 예제를 작성하고자 한다
아래의 그림과 같이 Scene 뷰를 구성하여 Sphere 가 양쪽 장벽 사이를 왕복하는 애니메이션 실행 중에 중간에 위치할 때 개발자가 정의한 함수가 호출되도록 하려고 한다.
여기서는 애니메이션의 중간 지점에서 이벤트가 발생하고 지정한 함수가 호출되면 사운드효과를 출력하게 하려고 한다
먼저 Sphere 가 양쪽 장벽 사이를 왕복하는 애니메이션을 작성한다. 아래 그림과 같이 선택하여 애니메이션 윈도우를 연다
Hierarchy 뷰에서 Sphere 를 선택하면 애니메이션 윈도우에 Sphere에 적용할 수 있는 애니메이션 대상 속성들이 보이는데, 먼저 애니메이션 파일을 생성해야 한다
애니메이션 파일의 이름을 AnimEvent 등으로 지정하고, X 축상으로 왕복하는 애니메이션 이므로 Position.x 항목의 우측 아이콘을 클릭하여 Add Curves 를 선택한다
첫 프레임을 키프레임으로 설정하고 Sphere 가 왼쪽 장벽에 위치(x : 11)하도록 조정한다
타임라인에서 2초 지점을 클릭하고 키프레임을 추가한 다음 X 좌표를 13 으로 설정한다
4초 지점에 키프레임을 추가하고 X 좌표를 다시 11 으로 설정한다. 이렇게 하면 Sphere 가 왕복하는 애니메이션은 완성된 것이다
그래프 상의 키프레임 위치에서 마우스 우측을 눌러서 Free Transform 을 선택하고 아래 그림과 같이 그래프를 수정하면 부드러운 애니메이션이 가능하다
양쪽 장벽에 가까이 다가 갈 때는 속도가 점차 줄어드는 효과를 낼 수 있기 때문에 부드럽고 자연스러운 애니메이션이 된다.
위의 설정을 마치면 애니메이션은 실행 테스트를 할 수 있다.
이제 Sphere 가 장벽의 중간 지점에 위치할 때는 지정한 함수가 호출되도록 설정하려고 한다
먼저 함수가 정의되어 있어야만 애니메이션에서 해당 함수를 이벤트 호출함수로 지정할 수 있다.
스크립트 파일 이름으로 OnCenter 등을 지정하고 Project 뷰에서 스크립트 이름을 더블클릭하여 에디터를 열고 다음과 같이 입력한다
#pragma strict
var audioClip :AudioClip;
function Start () {
}
function OnCenter () {
audio.PlayOneShot(audioClip);
}
완성된 스크립트를 Project 뷰에서 드래그하여 Hierarchy 뷰의 Sphere 에게 할당하고 Sphere 를 클릭하면 Inspector 뷰의 스크립트 콤포넌트에는 묵시적 public 변수로 선언된 audioClip 변수를 할당할 있도록 나타난다
위의 Inspector 뷰의 audioClip 변수에 할당할 오디오 파일을 Project 뷰로 임포트하여 드래그로 할당하면 된다
Sphere 오브젝트에서 AudioClip 을 사용하기 위해서는 Sphere 오브젝트에 AudioSource 콤포넌트를 추가하고 오디오 파일을 할당해주어야 한다
추가된 AudioSource 콤포넌트에 오디오 파일을 드래그하여 할당해준다
위의 설정으로 이벤트 함수는 준비가 되었으므로 이제 애니메이션에서 그 함수를 호출하도록 설정할 순서이다
타임라인 상에서 함수가 호출될 프레임을 선택하고 Add Event 아이콘을 누르면 함수 선택상자가 나타나는데 앞서 작성했던 함수를 선택한다
애니메이션을 무한 반복하도록 설정하여 사운드효과가 정상적으로 작동하는지 테스트한다