블루프린트에서 타이머 사용법

블루프린트에서 타이머를 사용하는 하우투 안내입니다.

Windows
MacOS
Linux

여기서는 블루프린트의 게임플레이 용도의 Timer 및 타이머 관련 노드 사용법을 다룹니다.

타이머 생성 및 소거

블루프린트에서 타이머를 생성/설정하는 방법은 다음과 같습니다.

이 예제에서는 블루프린트 삼인칭 템플릿 을 사용하여, 플레이어에게 지속적인 화염 대미지를 입힙니다.

  1. 프로젝트 안에서 ThirdPersonCharacter 블루프린트를 엽니다.

  2. 그래프에 우클릭 한 다음 PlayerInFirePlayerNotInFire 라는 Custom Event 를 두 개 추가합니다.

    GHT6B_1.png

  3. MyBlueprint 창에 FireDamage 라는 함수 를 새로 추가합니다.

    GHT6B_2.png

    이 함수는 Timer 에 의해 때때로 호출되어 대미지가 적용됩니다.

  4. PlayerInFire 이벤트를 끌어놓은 다음 Set Timer by Function Name 노드를 추가합니다.

  5. PlayerNotInFire 이벤트를 끌어놓고, Clear Timer by Handle 노드를 추가합니다.

  6. Set Timer by Function Name 에서 Function NameFireDamage 로 설정합니다.

  7. Set Timer by Function Name 에서 Time0.75 로, Looping 박스를 체크합니다.

  8. Set Timer by Function Name 노드의 Return Value 핀을 Clear Timer by Handle 노드의 Handle 핀에 연결합니다.

    GHT6B_3.png

    입력된 Time 간격(, 즉 0.75 초)마다 Function Name 함수가 호출됩니다.

  9. PlayerHealth 라는 Integer 변수를 새로 만들고, 컴파일 을 클릭한 다음 Default Value100 으로 설정합니다.

    GHT6B_4.png

  10. FireDamage 함수 안에서, Alt 키를 누른 채 PlayerHealth 변수를 끌어 그래프에 놓습니다.

  11. Control 키를 누르고 PlayerHealth 변수도 끌어 놓습니다.

  12. PlayerHealth 변수를 끌어놓고 Integer - Integer 노드를 추가한 다음, 0 핀을 끌어 놓고 Random Integer in Range 노드를 추가합니다.

    GHT6B_5.png

    최소 (1) 및 최대 (4) 값을 지정한 Random Integer in Range 노드를 사용했으나, 원하는 대미지 값을 입력해도 됩니다.

  13. Set 노드를 끌어놓고 Print String 을 추가한 다음 Control 키를 누른 채 PlayerHealth 를 끌어놓고 Print String 에 연결합니다.

    GHT6B_6.png

    이 예제에서는 헬쓰 바를 표시하지 않고 있지만, 이를 통해 헬쓰 값이 줄어드는 것을 확인할 수 있습니다.

  14. Content/StarterContent/Blueprints 폴더에 위치한 Blueprint_Effect_Fire 블루프린트를 엽니다.

  15. 컴포넌트 추가 버튼을 클릭한 다음 박스 모양을 추가하고 Trigger 라 부릅니다.

    GHT6B_7.png

    플레이어가 이 트리거에 들어서고/나가면, ThirdPersonCharacter 블루프린트에서 이벤트를 호출합니다.

  16. 내 블루프린트 탭에서 Trigger우클릭 한 다음 OnComponentBegin / OnComponentEnd Overlap 이벤트를 추가합니다.

    GHT6B_8.png

  17. 각각의 Other Actor 핀을 끌어 놓고 Cast To ThirdPersonCharacter 노드를 추가합니다.

  18. As ThirdPersonCharacter C 핀을 끌어놓고 (Begin 노드에 대해) PlayerInFire 이벤트를, (End 노드에 대해) PlayerIsNotInFire 이벤트를 추가합니다.

    GHT6B_8b.png

  19. 블루프린트를 컴파일, 저장 후 닫습니다.

  20. 콘텐츠 브라우저 에서 Blueprint_Effect_Fire 블루프린트를 끌어 레벨에 놓습니다.

    GHT6B_9.png

  21. 플레이 버튼을 눌러 에디터에서 플레이하고 불에 들어가 보면 대미지를 입기 시작하는 것을 볼 수 있을 것입니다.

이는 타이머를 사용하여 지속형 대미지 효과를 만드는 법을 보여주는 예제입니다만, X 초 동안 플레이어를 무적으로 만들거나 다른 능력이 생기도록 만드는 파워업을 나타내는 데도 타이머를 사용할 수 있습니다.

추가적인 타이머 관련 노드

Set Timer by Function NameClear Timer by Handle 노드가 타이머의 시작/중지에 사용되기는 하지만, 필요에 따라 아래 노드를 사용할 수도 있습니다.

타이머 경과시간 구하기 / 타이머 남은시간 구하기

GHT6B_10.png

Get Timer Elapsed by Handle / Get Timer Remaining by Handle 노드는 (Handle 로) 지정된 타이머가 시작된 이후 경과된 시간과 남아있는 시간을 구합니다. Float 로 값을 반환하며, 여러가지 다른 용도로 사용할 수도 있습니다. 이를테면 시간에 따라 이펙트를 변경한다든가, 이펙트가 소멸하려 할 때 메시지를 출력한다든가 하는 것입니다.

타이머 일시정지 / 해제

GHT6B_11.png

이름에서 알 수 있듯이 Pause Timer by Handle 는 타이머를 현재 시간에서 일시정지시키는 반면, Clear Timer by Handle 는 완전히 정지 및 리셋시킵니다. Unpause Timer by Handle 노드는 일시정지된 타이머를 멈춘 곳에서 다시 시작되도록 재개시키는 데 사용됩니다. 플레이어에게 타이머로 실행되는 이펙트가 적용되어 있는 경우, 메뉴나 인벤토리 화면에 들어가면 이펙트를 일시정지시키고 게임플레이로 돌아오면 재개시키는 경우를 예로 들 수 있겠습니다.

타이머 존재 / 활성화 / 일시정지 여부

GHT6B_12.png

Does Timer Exist by Handle, Is Timer Active by Handle, Is Timer Paused by Handle 노드 전부 True 또는 False 값을 반환하며, 각각 타이머가 존재하는지, 타이머가 현재 활성 상태인지, 타이머가 현재 일시정지되어 있는지를 확인하는 데 쓰입니다.

이벤트로 타이머 설정

GHT6B_13.png

Set Timer by Event 노드는 Set Timer by Function Name 노드와 비슷하나 Function Name 을 지정하는 대신 Custom Event 를 연결하여 발동시킬 수 있다는 점이 다릅니다. 여기에도 Set Timer by Function Name 노드와 마찬가지로 루핑 설정이 가능합니다.

Select Skin
Light
Dark

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼