Choose your operating system:
Windows
macOS
Linux
여기서는 액터에 대한 입력 활성화 및 입력 비활성화 의 기본적인 방법에 대해 다룹니다. 액터에 입력을 활성화시키면, 플레이어가 버튼이나 키를 눌렀을 때 액터에 어떤 식으로든 (라이트를 켜고 끈다든가, 문을 열고 닫는다든가, 무언가를 활성화시키는 등) 영향을 끼치는 이벤트를 실행시킵니다.
입력 사용 활성화/비활성화 부분에서는 Trigger Volume 을 사용하여 플레이어가 레벨의 액터 근처에 있는지 결정한 다음 입력을 활성화/비활성화시키는 접근법에 대해서도 다룹니다. 현실에서처럼, 플레이어가 액터 근처 또는 일정 범위 안에 있을 때만 영향을 끼치도록 하고자 할 때 좋습니다.
액터 입력 활성화
이 예제에서는 시작용 콘텐츠 포함 블루프린트 일인칭 템플릿 을 사용합니다.
액터에 대한 입력 활성화 방법은 다음과 같습니다:
-
StarterContent/Blueprints 폴더에서 Blueprint_Effect_Fire 애셋을 엽니다.
-
이벤트 그래프 탭에서 그래프에 우클릭 한 다음 Event Begin Play 노드를 추가합니다.
-
그래프에서 우클릭 하여 Get Player Controller 노드를 검색 추가합니다.
-
그래프에서 우클릭 하여 Enable Input 노드를 검색 추가합니다.
-
Event Begin Play 출력 핀을 Enable Input 노드의 입력 핀에 연결합니다.
-
Get Player Controller 노드를 Enable Input 노드의 Player Controller 핀에 연결합니다.
액터에 입력을 활성화시키는 기본적인 방법입니다.
Enable Input 노드는 Target (보통은 Self, 액터 그 자체)는 물론 Player Controller (입력을 제공해 줄 플레이어) 가 지정되어야 합니다. 이러한 셋업으로, 이제 (키 또는 마우스 버튼 눌림과 같은) Input Event 노드를 검색 추가한 다음 해당 키가 눌리면 액터에 영향을 끼치는 동작을 할 수 있습니다.
위 예제에서 Event Begin Play 노드는 게임이 시작되면 (레벨에 액터가 존재한다 가정하고), Player Controller 에 대한 Enable Input 이 지정됩니다. 기본 플레이어 컨트롤러는 싱글 플레이어 게임에는 Player Index 0 을 사용하고, 멀티플레이어 게임의 경우 Player Index 값을 통해 어느 플레이어인지 지정할 수 있습니다.
액터 입력 비활성화
액터에 입력을 활성화시킬 수 있는 것과 마찬가지로 Disable Input 노드를 사용하여 액터에 대한 입력을 비활성화시킬 수도 있습니다.
위 예제에서, 앞서 말한 방법을 사용하여 액터에 입력을 활성화시킨 다음 E Key Event 이벤트를 추가했습니다. E 키가 눌리면 화면에 약간의 텍스트를 출력한 다음, 액터에 입력을 비활성화시켜 더이상 입력을 제공받지 못하도록 합니다.
Enable Input 노드와 마찬가지로, Disable Input 노드는 Target 과 Player Controller 를 지정해야 합니다.
입력 사용 활성화/비활성화
위에 언급한 방법은 입력 활성화/비활성화에는 통하는 반면, 보통은 액터가 플레이어의 입력을 언제 받도록 할지에 대한 규칙을 두고자 하는 경우가 많습니다. 위에서 Enable Input 과 Event Begin Play 로 라이트를 껐다 켰다 하는 예제에서는, 플레이어가 월드 아무데서나 라이트를 껐다 켰다 할 수 있을 것입니다.
보통은 플레이어가 라이트 근처에 있을 때만 입력 활성화/비활성화 시키고 싶을 것입니다:
-
StarterContent/Blueprints 폴더에서 Blueprint_CeilingLight 애셋을 엽니다.
-
컴포넌트 패널에서 컴포넌트 추가 에 클릭한 다음 Sphere Collision (구체 콜리전)을 검색 추가합니다.
-
디테일 패널에서 Variable Name 을 Trigger 로, Z Transform 을 -180.0 으로, 스케일 X, Y, Z 를 8 로 설정합니다.
구체의 입력 활성화 (플레이어가 안에 있을 때) 또는 입력 비활성화 (플레이어가 밖에 있을 때) 해주도록 하겠습니다.
-
이벤트 그래프 로 돌아갑니다.
-
내 블루프린트 창에서 Trigger 에 우클릭한 다음 이벤트 추가 -> OnComponentBeginOverlap 추가 를 선택합니다.
-
Trigger 에 다시 한 번 우클릭 한 다음 이벤트 추가 -> OnComponentEndOverlap 추가 를 선택합니다.
이와 같은 이벤트 노드 둘이 그래프에 추가되었을 것입니다.
-
Begin Overlap 노드의 Other Actor 핀을 끌어 놓은 다음 FirstPersonCharacter 에 형변환 노드를 검색 추가합니다.
여기서는 (프로젝트 템플릿의 기존 플레이어 캐릭터인) FirstPersonCharacter 라는 액터가 트리거 에 겹치면, 무언가를 하라는 뜻입니다.
-
End Overlap 노드의 Other Actor 핀을 끌어 놓은 다음 FirstPersonCharacter 에 형변환 노드를 추가합니다.
-
우클릭 한 다음 Get Player Controller , Enable Input , Disable Input 노드를 추가합니다.
-
노드를 아래와 같이 연결합니다.
이제 플레이어가 트리거에 들어설 때만 입력이 활성화되고 나가면 비활성화될 것입니다. 플레이어가 월드 어디에 있어도 액터에 영향을 끼치지 못하게 하고, 만들어 둔 트리거 볼륨 안에 있을 때만 가능하도록 제한시킵니다.
-
우클릭 후 E Key Event 를 추가한 다음 Print String 노드에 연결합니다.
-
컴파일 , 저장 후 블루프린트를 닫습니다 (경고창이 뜨면 무시하고 다음 단계로 진행합니다).
-
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 옵션이 보일 것입니다.
Consume Input 박스 체크를 해제한 다음 에디터에서 다시 플레이해 보면, 라이트의 트리거 볼륨 안에서도 밖에서도 점프할 수 있을 것입니다. 라이트의 트리거 볼륨 안에 있을 때 Space Bar 를 누르면 Print String 노드도 호출하여 Hello 텍스트가 표시되는 것입니다.
입력 디테일 창 안에는 Execute when Paused (일시정지시 실행 - 일시정지 상태에서 키 입력 및 명령 실행 가능), Override Parent Binding (부모 바인딩 덮어쓰기 - 부모 클래스에 설정된 바인딩 제거) 옵션도 있습니다.