언어:
페이지 정보
수준별:
엔진 버전:
언리얼 엔진

블루프린트로 액터에 입력 구성

언리얼 엔진

여기서는 액터에 대한 입력 활성화입력 비활성화 의 기본적인 방법에 대해 다룹니다. 액터에 입력을 활성화시키면, 플레이어가 버튼이나 키를 눌렀을 때 액터에 어떤 식으로든 (라이트를 켜고 끈다든가, 문을 열고 닫는다든가, 무언가를 활성화시키는 등) 영향을 끼치는 이벤트를 실행시킵니다.

입력 사용 활성화/비활성화 부분에서는 Trigger Volume 을 사용하여 플레이어가 레벨의 액터 근처에 있는지 결정한 다음 입력을 활성화/비활성화시키는 접근법에 대해서도 다룹니다. 현실에서처럼, 플레이어가 액터 근처 또는 일정 범위 안에 있을 때만 영향을 끼치도록 하고자 할 때 좋습니다.

액터 입력 활성화

이 예제에서는 시작용 콘텐츠 포함 블루프린트 일인칭 템플릿 을 사용합니다.

액터에 대한 입력 활성화 방법은 다음과 같습니다:

  1. StarterContent/Blueprints 폴더에서 Blueprint_Effect_Fire 애셋을 엽니다.

  2. 이벤트 그래프 탭에서 그래프에 우클릭 한 다음 Event Begin Play 노드를 추가합니다.

  3. 그래프에서 우클릭 하여 Get Player Controller 노드를 검색 추가합니다.

  4. 그래프에서 우클릭 하여 Enable Input 노드를 검색 추가합니다.

  5. Event Begin Play 출력 핀을 Enable Input 노드의 입력 핀에 연결합니다.

  6. Get Player Controller 노드를 Enable Input 노드의 Player Controller 핀에 연결합니다.

    input_1.png

    액터에 입력을 활성화시키는 기본적인 방법입니다.

Enable Input 노드는 Target (보통은 Self, 액터 그 자체)는 물론 Player Controller (입력을 제공해 줄 플레이어) 가 지정되어야 합니다. 이러한 셋업으로, 이제 (키 또는 마우스 버튼 눌림과 같은) Input Event 노드를 검색 추가한 다음 해당 키가 눌리면 액터에 영향을 끼치는 동작을 할 수 있습니다.

위 예제에서 Event Begin Play 노드는 게임이 시작되면 (레벨에 액터가 존재한다 가정하고), Player Controller 에 대한 Enable Input 이 지정됩니다. 기본 플레이어 컨트롤러는 싱글 플레이어 게임에는 Player Index 0 을 사용하고, 멀티플레이어 게임의 경우 Player Index 값을 통해 어느 플레이어인지 지정할 수 있습니다.

액터 입력 비활성화

액터에 입력을 활성화시킬 수 있는 것과 마찬가지로 Disable Input 노드를 사용하여 액터에 대한 입력을 비활성화시킬 수도 있습니다.

input_2.png

위 예제에서, 앞서 말한 방법을 사용하여 액터에 입력을 활성화시킨 다음 E Key Event 이벤트를 추가했습니다. E 키가 눌리면 화면에 약간의 텍스트를 출력한 다음, 액터에 입력을 비활성화시켜 더이상 입력을 제공받지 못하도록 합니다.

Enable Input 노드와 마찬가지로, Disable Input 노드는 TargetPlayer Controller 를 지정해야 합니다.

입력 사용 활성화/비활성화

위에 언급한 방법은 입력 활성화/비활성화에는 통하는 반면, 보통은 액터가 플레이어의 입력을 언제 받도록 할지에 대한 규칙을 두고자 하는 경우가 많습니다. 위에서 Enable Input 과 Event Begin Play 로 라이트를 껐다 켰다 하는 예제에서는, 플레이어가 월드 아무데서나 라이트를 껐다 켰다 할 수 있을 것입니다.

보통은 플레이어가 라이트 근처에 있을 때만 입력 활성화/비활성화 시키고 싶을 것입니다:

  1. StarterContent/Blueprints 폴더에서 Blueprint_CeilingLight 애셋을 엽니다.

  2. 컴포넌트 패널에서 컴포넌트 추가 에 클릭한 다음 Sphere Collision (구체 콜리전)을 검색 추가합니다.

    input_3.png

  3. 디테일 패널에서 Variable NameTrigger 로, Z Transform-180.0 으로, 스케일 X, Y, Z8 로 설정합니다.

    input_4.png

    구체의 입력 활성화 (플레이어가 안에 있을 때) 또는 입력 비활성화 (플레이어가 밖에 있을 때) 해주도록 하겠습니다.

  4. 이벤트 그래프 로 돌아갑니다.

  5. 내 블루프린트 창에서 Trigger 에 우클릭한 다음 이벤트 추가 -> OnComponentBeginOverlap 추가 를 선택합니다.

    input_5.png

  6. Trigger 에 다시 한 번 우클릭 한 다음 이벤트 추가 -> OnComponentEndOverlap 추가 를 선택합니다.

    input_5b.png

    이와 같은 이벤트 노드 둘이 그래프에 추가되었을 것입니다.

  7. Begin Overlap 노드의 Other Actor 핀을 끌어 놓은 다음 FirstPersonCharacter 에 형변환 노드를 검색 추가합니다.

    input_6.png

    여기서는 (프로젝트 템플릿의 기존 플레이어 캐릭터인) FirstPersonCharacter 라는 액터가 트리거 에 겹치면, 무언가를 하라는 뜻입니다.

  8. End Overlap 노드의 Other Actor 핀을 끌어 놓은 다음 FirstPersonCharacter 에 형변환 노드를 추가합니다.

  9. 우클릭 한 다음 Get Player Controller, Enable Input, Disable Input 노드를 추가합니다.

  10. 노드를 아래와 같이 연결합니다.

    input_7.png

    이제 플레이어가 트리거에 들어설 때만 입력이 활성화되고 나가면 비활성화될 것입니다. 플레이어가 월드 어디에 있어도 액터에 영향을 끼치지 못하게 하고, 만들어 둔 트리거 볼륨 안에 있을 때만 가능하도록 제한시킵니다.

  11. 우클릭E Key Event 를 추가한 다음 Print String 노드에 연결합니다.

    input_8.png

  12. 컴파일, 저장 후 블루프린트를 닫습니다 (경고창이 뜨면 무시하고 다음 단계로 진행합니다).

  13. Blueprint_CeilingLight 를 끌어 레벨에 놓은 다음, 플레이 버튼을 클릭하여 에디터에서 플레이합니다.

플레이 중 라이트에서 멀리 떨어져 있을 때 E 키를 누르면 아무일도 벌어지지 않습니다. 라이트에 가까이 (트리거 안에) 있을 때 E 키를 누르면, Hello 텍스트가 창 좌상단 구석에 나타납니다. 이 예제에서는 Print String 노드를 연결했지만, 플레이어가 트리거 구체 안에 있을 때 키가 눌리면 라이트 색, 세기, 기타 세팅을 토글시킬 수도 있습니다.

입력 디테일

위 예제에서 E Key Event 대신 Space Bar Key Event 같은 것을 사용해 봅시다. 에디터에서 플레이하면, 무슨 일이 벌어지는지 보세요. 라이트의 트리거 밖에서 Space Bar 를 클릭하면 점프하다가, 트리거에 들어서서 누르면 더이상 점프가 아닌 Hello 텍스트가 화면에 출력됩니다. 이는 Input Priority 입력 우선권 때문입니다.

입력 명령이 공유되는 경우 (여기서처럼 점프와 라이트에 할당한 것이 모두 Space Bar 인 경우), 우선권이 낮은 액션은 무시됩니다. 라이트 블루프린트 안에서 Space Bar Key Event 를 클릭한 다음 디테일 패널을 보면 Consume Input 옵션이 보일 것입니다.

input_9.png

Consume Input 박스 체크를 해제한 다음 에디터에서 다시 플레이해 보면, 라이트의 트리거 볼륨 안에서도 밖에서도 점프할 수 있을 것입니다. 라이트의 트리거 볼륨 안에 있을 때 Space Bar 를 누르면 Print String 노드도 호출하여 Hello 텍스트가 표시되는 것입니다.

입력 디테일 창 안에는 Execute when Paused (일시정지시 실행 - 일시정지 상태에서 키 입력 및 명령 실행 가능), Override Parent Binding (부모 바인딩 덮어쓰기 - 부모 클래스에 설정된 바인딩 제거) 옵션도 있습니다.