Unreal Engine 스프린트와 스태미나: AI로 스태미나 바 만들기
Unreal Engine 스프린트와 스태미나: Left Shift로 속도 900, 초당 25 소모, 1초 뒤 회복, 바닥나면 잠금. AI 요청 한 번으로 만듭니다.
Unreal Engine의 스태미나 시스템은 세 가지 작은 아이디어로 이루어집니다. 스태미나라는 숫자 하나, 언제 달릴 수 있고 비용이 얼마인지 정하는 규칙, 그리고 언제 되돌아오는지 정하는 규칙입니다. 바, 색상, 속도까지 화면에 보이는 모든 것은 그 숫자 하나에 반응할 뿐입니다. 가장 쉬운 방법은 AI에게 속도, 소모, 회복, 잠금 규칙까지 시스템 전체를 한 번의 요청으로 맡기는 것입니다.
이 튜토리얼에서는 Ultimate Engine CoPilot이 Left Shift로 달리는 스프린트와, 소모되고 회복되며 바닥나면 잠기는 스태미나 바를 만듭니다. 정확한 프롬프트, AI가 캐릭터에서 발견한 문제와 해결 방법, 그리고 스태미나 시스템의 작동 원리에 대한 쉬운 설명을 확인할 수 있습니다.
완성된 시스템이 하는 일
걸을 때는 스태미나가 가득 차 있으므로 바가 보이지 않습니다. Shift를 누르고 있으면 캐릭터가 더 빠르게 달리고, 어빌리티 바 위에 작은 바가 나타납니다. 달리는 동안 바가 줄어들고, 거의 바닥나면 주황색으로 바뀝니다. 손을 떼고 1초쯤 기다리면 다시 차오릅니다. 그리고 바닥날 때까지 달리면 바가 회복될 때까지 스프린트가 잠깁니다.

스프린트 중: 초록색 스태미나 바가 어빌리티 바 위에 있습니다.
프롬프트
아래 내용을 복사해서 속도나 소모량을 바꾼 뒤, AI가 무엇을 만드는지 확인해 보세요.
Make sprinting with a stamina bar. Create WBP_StaminaBar in /Game/Series/EP39_Sprint, a thin horizontal bar at the bottom centre of the screen above the existing ability bar, 400 pixels wide and 14 pixels high, with a dark background and a green fill that turns orange below 30 percent, and hidden while stamina is full. Create BP_SprintController in the same folder, an actor that I place once in the level, that adds the widget on BeginPlay and listens for Left Shift. While Left Shift is held, the player is moving and stamina is above 0, set the character's MaxWalkSpeed to 900 and drain 25 stamina per second out of 100. When the player is not sprinting, wait 1 second and then regenerate 20 stamina per second. If stamina reaches 0, sprinting stays locked until stamina is back to 30. The actor must read and remember the original MaxWalkSpeed and restore it when the sprint ends. Keep the sprint speed, the drain, the regeneration and the lock threshold as variables. Place the actor near the player start. Then play test it: record the original walk speed, hold Left Shift while moving forward and check the speed is 900 and stamina falls, release and check the original speed is restored and stamina regenerates after the delay, hold until stamina is empty and check the sprint is locked, and fix anything that does not work.
900, 25, 20, 30, 그리고 1초라는 숫자를 보세요. 모든 규칙에 숫자가 있으므로 AI가 어떤 느낌이 좋을지 추측할 필요가 없습니다. 한 가지 더 눈여겨볼 점이 있습니다. 액터가 원래 속도를 기억했다가 복원해야 한다는 것입니다. 이를 말해 주지 않으면 많은 스프린트 시스템이 플레이어를 엉뚱한 속도에 묶어 둡니다.
AI가 스태미나 시스템을 만드는 과정
AI는 먼저 프로젝트를 읽습니다. HUD에서 어빌리티 바가 어디에 있는지 확인해, 새 바를 그 위에 가리지 않게 둘 수 있게 합니다. 그러면 두 에셋이 나타납니다. 스태미나 바 위젯과 스프린트 컨트롤러 Blueprint입니다. 요청한 숫자는 변수가 되므로, 나중에 그래프를 건드리지 않고도 바꿀 수 있습니다.
바가 처음에는 왼쪽 가장자리에 놓였기 때문에, AI는 앵커를 아래쪽 중앙으로 바로잡고 컨트롤러를 플레이어 시작 지점 근처에 배치했습니다.

컨트롤러 그래프: 매 프레임 Shift, 이동, 스태미나를 확인합니다.
캐릭터 안에 있던 문제
첫 번째 실행에서는 11개의 검사가 통과하고 두 개가 실패합니다. AI는 실패 내용을 읽습니다. 속도는 900이어야 하는데 600에 머물렀고, 스프린트가 잠겨 있는 동안에는 속도가 1000으로 읽혔습니다. AI는 원인을 찾아냅니다. 이 캐릭터에는 이미 자체 스프린트가 있었고, 매 프레임 속도를 1000으로 설정하고 있었습니다. 실제 프로젝트에서는 흔히 있는 일이며, AI는 캐릭터를 건드리지 않고 우회했습니다. 이제 컨트롤러가 매 프레임, 플레이어 컨트롤러 이후이면서 무브먼트 이전에 자신의 속도를 씁니다.
두 번째 실행에서는 19개의 검사가 모두 통과합니다.
리포트

규칙마다의 근거와, 캐릭터 자체 스프린트에 대한 메모.
리포트에는 모든 검사와 그 근거를 담은 표가 있습니다.
- 걷는 속도는 600입니다. 스프린트 중에는 속도가 900이고, 실제 폰의 속도는 899.98입니다.
- 1.5초 동안 스프린트한 뒤의 스태미나는 61.5로, 계산상 예상되는 62.5에 가깝습니다.
- 키를 놓으면 속도가 600으로 돌아옵니다. 처음 1초 동안은 회복이 없고, 그다음부터 차오릅니다.
- 바닥날 때까지 누르고 있으면 스프린트가 잠깁니다. Shift를 계속 누른 채 스태미나가 13.9일 때 속도는 600입니다. 잠금은 30.8에서 풀리고 스프린트가 900으로 다시 시작됩니다.
리포트는 확인하지 못한 부분도 솔직하게 밝힙니다. 주황색 바는 화면에서 확인했지만, 초록색 바와 숨김 상태는 위젯 그래프로만 확인했습니다. 그리고 캐릭터의 스프린트는 제거한 것이 아니라 덮어쓴 것인데, 이 캐릭터가 에셋 팩에서 온 것이기 때문입니다. 원한다면 제거해 주겠다고도 제안합니다. 레벨도 아직 저장되지 않았습니다.
스태미나 시스템의 작동 원리, 쉽게 설명하면
컨트롤러는 매 프레임 세 가지를 확인합니다. Shift를 누르고 있는가, 플레이어가 움직이고 있는가, 스태미나가 0보다 크고 잠겨 있지 않은가? 세 가지가 모두 그렇다면 속도는 스프린트 속도가 되고, 스태미나는 소모량에 프레임 시간을 곱한 만큼 조금 줄어듭니다. 그렇지 않다면 속도는 기억해 둔 원래 속도로 돌아갑니다. 타이머가 1초를 센 뒤에는 매 프레임 스태미나가 조금씩 올라갑니다.
스태미나가 0에 이르면 locked라는 플래그 하나가 켜지고, 스태미나가 30으로 돌아와야만 꺼집니다. 이 간격이 스프린트가 깜빡이며 켜졌다 꺼졌다 하는 것을 막아 줍니다. 바는 그 숫자를 읽기만 합니다. 초록색이다가 30퍼센트 아래에서는 주황색이 됩니다. 속도, 소모량, 회복량이 변수이므로, 숫자 세 개만 바꿔서 쉽게 지치는 러너나 지치지 않는 러너를 만들 수 있습니다.
확장 아이디어
- 점프에 다른 소모량 적용하기.
- 바가 바닥났을 때 짧게 지친 소리와 거칠어진 숨소리.
- 스프린트하는 동안 시야각이 조금 넓어지는 효과. 시야각이 블렌드되는 방식은 Unreal Engine 줌 시점을 참고하세요.
스태미나 프롬프트를 위한 네 가지 팁
- 모든 규칙에 숫자를 지정하세요. 속도, 소모량, 지연 시간, 잠금 기준입니다.
- 기존 UI를 기준으로 바가 들어갈 위치를 적으세요.
- AI에게 원래 속도를 복원하도록 요청하세요.
- 가득 찬 경우만이 아니라 바닥난 경우도 테스트하도록 요청하세요.
자주 묻는 질문
Unreal Engine 5에서 스태미나가 있는 스프린트는 어떻게 만드나요?
키를 누르고 있고 플레이어가 움직이는 동안 MaxWalkSpeed를 더 높게 설정하고 매 프레임 스태미나를 소모하세요. 일정 시간이 지난 뒤 회복하고, 스태미나가 0이 되면 기준값까지 회복될 때까지 스프린트를 잠그세요.
스프린트는 왜 스태미나가 30으로 돌아올 때까지 잠기나요?
바닥난 값과 잠금 해제 값 사이에 간격을 두면, 스태미나가 0 근처에 머물 때 스프린트가 깜빡이며 켜졌다 꺼졌다 하는 것을 막을 수 있습니다.
첫 번째 실행에서 검사 두 개가 실패한 이유는 무엇인가요?
캐릭터에 이미 자체 스프린트가 있었고, 이것이 매 프레임 속도를 1000으로 설정하고 있었기 때문입니다. AI는 캐릭터를 수정하지 않고, 매 프레임 올바른 순서로 자신의 속도를 쓰는 방식으로 우회했습니다.
프로젝트에서 직접 사용해 보세요
Ultimate Engine CoPilot으로 무엇을 만들 수 있는지 제품 페이지에서 확인하거나, Fab에서 받아 보세요. AI Blueprint 생성기가 어떻게 작동하는지 확인해 보세요.
이 시리즈의 다른 빌드: Unreal Engine 얼음 구간, Unreal Engine 스피드 부스트, 그리고 Unreal Engine 낙하 데미지.