Choose your operating system:
Windows
macOS
Linux
여기서는 블루프린트의 게임플레이 용도의 Timer 및 타이머 관련 노드 사용법을 다룹니다.
타이머 생성 및 소거
블루프린트에서 타이머를 생성/설정하는 방법은 다음과 같습니다.
이 예제에서는 블루프린트 삼인칭 템플릿 을 사용하여, 플레이어에게 지속적인 화염 대미지를 입힙니다.
-
프로젝트 안에서 ThirdPersonCharacter 블루프린트를 엽니다.
-
그래프에 우클릭 한 다음 PlayerInFire 와 PlayerNotInFire 라는 Custom Event 를 두 개 추가합니다.
-
MyBlueprint 창에 FireDamage 라는 함수 를 새로 추가합니다.
이 함수는 Timer 에 의해 때때로 호출되어 대미지가 적용됩니다.
-
PlayerInFire 이벤트를 끌어놓은 다음 Set Timer by Function Name 노드를 추가합니다.
-
PlayerNotInFire 이벤트를 끌어놓고, Clear Timer by Handle 노드를 추가합니다.
-
Set Timer by Function Name 에서 Function Name 을 FireDamage 로 설정합니다.
-
Set Timer by Function Name 에서 Time 을 0.75 로, Looping 박스를 체크합니다.
-
Set Timer by Function Name 노드의 Return Value 핀을 Clear Timer by Handle 노드의 Handle 핀에 연결합니다.
입력된 Time 간격(, 즉 0.75 초)마다 Function Name 함수가 호출됩니다.
-
PlayerHealth 라는 Integer 변수를 새로 만들고, 컴파일 을 클릭한 다음 Default Value 를 100 으로 설정합니다.
-
FireDamage 함수 안에서, Alt 키를 누른 채 PlayerHealth 변수를 끌어 그래프에 놓습니다.
-
Control 키를 누르고 PlayerHealth 변수도 끌어 놓습니다.
-
PlayerHealth 변수를 끌어놓고 Integer - Integer 노드를 추가한 다음, 0 핀을 끌어 놓고 Random Integer in Range 노드를 추가합니다.
최소 (1) 및 최대 (4) 값을 지정한 Random Integer in Range 노드를 사용했으나, 원하는 대미지 값을 입력해도 됩니다.
-
Set 노드를 끌어놓고 Print String 을 추가한 다음 Control 키를 누른 채 PlayerHealth 를 끌어놓고 Print String 에 연결합니다.
이 예제에서는 헬쓰 바를 표시하지 않고 있지만, 이를 통해 헬쓰 값이 줄어드는 것을 확인할 수 있습니다.
-
Content/StarterContent/Blueprints 폴더에 위치한 Blueprint_Effect_Fire 블루프린트를 엽니다.
-
컴포넌트 추가 버튼을 클릭한 다음 박스 모양을 추가하고 Trigger 라 부릅니다.
플레이어가 이 트리거에 들어서고/나가면, ThirdPersonCharacter 블루프린트에서 이벤트를 호출합니다.
-
내 블루프린트 탭에서 Trigger 에 우클릭 한 다음 OnComponentBegin / OnComponentEnd Overlap 이벤트를 추가합니다.
-
각각의 Other Actor 핀을 끌어 놓고 Cast To ThirdPersonCharacter 노드를 추가합니다.
-
As ThirdPersonCharacter C 핀을 끌어놓고 (Begin 노드에 대해) PlayerInFire 이벤트를, (End 노드에 대해) PlayerIsNotInFire 이벤트를 추가합니다.
-
블루프린트를 컴파일 , 저장 후 닫습니다.
-
콘텐츠 브라우저 에서 Blueprint_Effect_Fire 블루프린트를 끌어 레벨에 놓습니다.
-
플레이 버튼을 눌러 에디터에서 플레이하고 불에 들어가 보면 대미지를 입기 시작하는 것을 볼 수 있을 것입니다.
이는 타이머를 사용하여 지속형 대미지 효과를 만드는 법을 보여주는 예제입니다만, X 초 동안 플레이어를 무적으로 만들거나 다른 능력이 생기도록 만드는 파워업을 나타내는 데도 타이머를 사용할 수 있습니다.
추가적인 타이머 관련 노드
Set Timer by Function Name 및 Clear Timer by Handle 노드가 타이머의 시작/중지에 사용되기는 하지만, 필요에 따라 아래 노드를 사용할 수도 있습니다.
타이머 경과시간 구하기 / 타이머 남은시간 구하기
Get Timer Elapsed by Handle / Get Timer Remaining by Handle 노드는 ( Handle 로) 지정된 타이머가 시작된 이후 경과된 시간과 남아있는 시간을 구합니다. Float 로 값을 반환하며, 여러가지 다른 용도로 사용할 수도 있습니다. 이를테면 시간에 따라 이펙트를 변경한다든가, 이펙트가 소멸하려 할 때 메시지를 출력한다든가 하는 것입니다.
타이머 일시정지 / 해제
이름에서 알 수 있듯이 Pause Timer by Handle 는 타이머를 현재 시간에서 일시정지시키는 반면, Clear Timer by Handle 는 완전히 정지 및 리셋시킵니다. Unpause Timer by Handle 노드는 일시정지된 타이머를 멈춘 곳에서 다시 시작되도록 재개시키는 데 사용됩니다. 플레이어에게 타이머로 실행되는 이펙트가 적용되어 있는 경우, 메뉴나 인벤토리 화면에 들어가면 이펙트를 일시정지시키고 게임플레이로 돌아오면 재개시키는 경우를 예로 들 수 있겠습니다.
타이머 존재 / 활성화 / 일시정지 여부
Does Timer Exist by Handle , Is Timer Active by Handle , Is Timer Paused by Handle 노드 전부 True 또는 False 값을 반환하며, 각각 타이머가 존재하는지, 타이머가 현재 활성 상태인지, 타이머가 현재 일시정지되어 있는지를 확인하는 데 쓰입니다.
이벤트로 타이머 설정
Set Timer by Event 노드는 Set Timer by Function Name 노드와 비슷하나 Function Name 을 지정하는 대신 Custom Event 를 연결하여 발동시킬 수 있다는 점이 다릅니다. 여기에도 Set Timer by Function Name 노드와 마찬가지로 루핑 설정이 가능합니다.