UDK 언리얼 엔진 배우기(7)-문열기 / 애니메이션,사운드(키즈멧,Matinee)

2011. 6. 29. 14:13Unreal

7번째 강좌 문서입니다. 이문서는 3dbuzz동영상을 참고로 만들어졌으니 참고하세요.

먼저 팁
매티리얼 복사&붙이기(굉장히 유용하니 필히 기억해야 합니다.)

복사 : ALT+매티리얼클릭+우클릭
붙이기 : ALT+붙일 메시위로 좌클릭


움직이는 문은 어떻게 만들어야 할까요.
생각해보면  4가지가 필요하겠네요.

- 움직일 물체(철창문),
- 이벤트 Trigger,
- 키프레임 애니메이션(Matinee),
- Sound(열림/닫힘)


메시는 Trigger가 이벤트를 감지하면 애니메이션이 수행되고, 수행되면서 사운드가 같이 플레이 되는겁니다.

움직이는 문

1. 지오메트리 제작
해당 문이 들어갈 장소를 아래와 같이 브러시로 제작합니다.
지오메트리 모드로 가운데를 2개로 분할하고, 돌출을 이용해 한쪽으로 홈을 아래와 같이 팝니다.
분할할때는 아래와 같이 버텍스 중간의 선을 클릭하면 됩니다.

완성후의 모습

왼쪽으로 문이 들어갈 공간이 있고, 오른쪽으로 홈이파여서 문의 끝가장자리가 제작되었습니다.
아직 이문서를

이제 지오메트리를 다시 빌드한후, 새로생긴 홈등에 Material을 발라줍니다. 문서 첫머리에 있는 기능을 이용해 Copy&Paste하면 됩니다.

2. 문이 될 메시를 추가한다.
   여기서는 철창문 스태틱 메시를 선택한후, 마우스 오른쪽/Add InterpActor 추가 를 선택하였습니다.
   InterActor(보간 액터)란 다이내믹한 메시로 움직일수 있는 메시를 말합니다.
   (중요: 스태틱 메시가 아닌 보간액터를 선택해야하는것을 잊지 말아야 합니다.)



3. 마우스 오른쪽/Actor추가/Trigger

4. Trigger  이벤트 영역을 수정한다.
   Trigger/Cylinder Component/CylinderComponent 의 Collision Height, Collision Radius를 조정하면 됩니다.


5. Trigger를 선택한후 키즈멧을 연다.
   (여기에서 Trigger와 Martinee를 연결하게 됩니다.)

6. 키즈멧 위에서 Trigger 새이벤트 사용/Touch 를 선택한다.
   (참고: 특정 다이어그램을 이동할때는 Ctrl+드래그 하면 됩니다.)


7. 다시 해당 키즈멧위에서 마우스 오른쪽/New Marinee 를 선택하여 생성한다.
   이렇게 생성된 다이어그램 위의 Matinee를 더블클릭하면 Matinee 툴이 뜹니다.

8. 마우스오른쪽/ 빈 그룹 추가를 선택하여 SlidingGate 를 입력합니다.

9. 창을 모두 닫고 철창문 메시를 선택한후 Matinee를 바로 엽니다.
   SlidingGate 에서 무브먼트 트랙을 새로 추가합니다.
   (참고: 만약 움직일수있는 보간액터가 아니라면 경고창이 뜹니다. 1번참고)


10. 이제 키프레임 애니메이션을 제작합니다. 1초정도로 설정하면 아래와 같이 됩니다.
    (아래쪽 화살표를 오른쪽으로 드래그후 엔터)
이제 제일 마지막 프레임을 선택한 후(오른쪽 위 삼각형 클릭) 레벨화면에서 문이 열리는 최종 목적지를 선택하면
마지막 프레임 이 설정되게 됩니다.
이렇게 Matinee에서 처음과 마지막을 결정해주면 중간은 알아서 애니메이션이 수행됩니다.

(Matinee에서 현재 설정된 키프레임 애니메이션을 플레이 해볼수 있습니다.
플레이 하면 자동으로 문이 열리는걸 볼수 있겠죠?)

11. 키즈멧을 열고 Trigger와  Matinee를 연결합니다.
    - 문열림: Trigger/Touched 를 Matinee/Play와 연결
    - 문닫힘: Trigger/unTouched 를 Matinee/Reverse와 연결
              (Reverse란 애니메이션을 거꾸로 플레이하는걸 말합니다.)


    중요: 2개의 Trigger Count가 있으므로 키즈멧에서 이를 설정해 주어야 문이 제대로 닫힙니다.
          키즈멧에서 Trigger를 선택한후 속성창에서 Max Trigger Count=0로 설정합니다.
          (참고: Max Trigger Count = 0 이면 무한 반복)
          항상 문에 갈때마다 열리고 닫혀야 하므로 무한 반복이 되어야 합니다.
          1이면 같은 게임내에서 오로지 한번만 수행되게 되는겁니다.

    이제 실제 게임을 플레이해서 문근처로 가면 자동으로 열리고 닫히는걸 확인할 수 있습니다.


12. 철창문 통과 문제 해결
  철창 메시를 선택후 속성창에서 Collision/Collision Type 을 Collide blackall을 선택합니다.
  이제 플레이 하면 제대로 문에 걸리고 총알도 통과 되지 않는걸 확인할 수 있습니다.

사운드 추가

(연장선이라 번호는 유지합니다)

13. 사운드 효과 추가
  사운드없으면 어색하겠죠?
  키즈멧을 열고 New Action/Sound/Play Sound를 선택합니다.

14. 컨텐트브라우저에서 사운드 필터를 선택후 door로 검색합니다.
    이제 키즈멧의 PlaySound 다이얼로그를 선택합니다. Play Sound 속성 옆의 녹생 화살표를 선택하면
    컨텐트 브라우저에서 지정한 사운드가 자동으로 입력된걸 확인할 수 있습니다.

    또한 Obj Comment = "Door Opening Sound"를 입력합니다. (주석입니다.)


15. 이제 키즈멧에서 연결해야 합니다.
    Trigger/Touched - Play Sound/Play 와 연결
    Play Sound/Target - Matinee/Sliding Gate/InterpActor 와 연결
    (InterActor의 경우 복잡하게 느껴지면 Copy&Paste를 통해 InterpActor의 레퍼런스를 만들수 있습니다.
     이걸 Target에 바로 연결할 수 있습니다. 아래 그림 확인)

16. 이제 같은 방식으로 문이 완전히 열렸을때의 사운드와 닫힐때의 사운드를 추가합니다.
    다 추가하면 아래와 같이 되겠네요.


모두 완료되었습니다. 이제 게임플레이를 해보면
철창문 근처에 가면 사운드와 함께 열리고 닫히는걸 볼 수 있습니다. :)

이번 순서에서는 키즈멧,matinee를 이용한 이벤트 Trigger와 사운드, 키프레임 애니메이션을 어떻게 하는지 맛만 봤군요. 어렵지는 않은데, 설명하려니 복잡하군요 :) 
역시 동영상을 한번 보시는걸 추천합니다. :(

감사합니다.