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

인터페이스 사용법

언리얼 엔진

이번 비법에서는 Blueprint Interface (블루프린트 인터페이스)를 구성, 호출시 여러 블루프린트의 스크립트 다수를 실행시키는 법을 알아보겠습니다.

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

  1. Content/StarterContent/Props 폴더에서 SM_GlassWindow우클릭디스트럭터블 메시 생성 을 선택합니다.

    Interface1.png

    이 스태틱 메시를 맞으면 부서지는 디스트럭터블 메시로 바꾸고 있습니다.

  2. 디스트럭터블 메시를 연 뒤, 프랙처 메시, 저장 클릭 후 디스트럭터블 메시 에디터 창을 닫습니다.

    Interface2.png

  3. SM_GlassWindow_DM 애셋에 우클릭한 다음, 애셋 액션 아래 다음을 사용해서 블루프린트 생성... 을 선택합니다.

    Interface3.png

    이렇게 하면 블루프린트 이름과 저장 위치를 입력하라는 창이 뜹니다 (여기서는 SM_GlassWindow_DM 입니다).

  4. 콘텐츠 브라우저 안에 우클릭 한 다음 블루프린트 아래 블루프린트 인터페이스 를 선택합니다.

    Interface4.png

    그러면 다시 한 번 블루프린트 인터페이스의 이름과 저장 위치를 입력하라는 창이 뜹니다 (여기서는 DM_Interface 입니다).

  5. 블루프린트 인터페이스 안에서 기존 IsDestructible? 함수의 이름을 짓고 추가 를 클릭하여 아래와 같이 입력 을 추가합니다.

    Interface5.png

    위에서 입력 을 세 개 추가하여 이 블루프린트 인터페이스를 구현하는 블루프린트끼리 변수를 전달합니다. Float 변수를 둘 만들었는데, 하나는 Damage 라 하여 맞은 오브젝트에 입힐 대미지 양을 전달하는 데 사용하고, 다른 하나는 Strength 로 적용할 충격 강도를 나타냅니다. 마지막으로 Vector 변수 HitLoc 를 추가하여 맞은 오브젝트의 위치를 저장, 그 정보를 여기저기 전달할 수 있도록 합니다.

  6. 블루프린트 인터페이스를 컴파일, 저장 후 닫습니다.

  7. 콘텐츠 브라우저 에서 SM_GlassWindow_DM 블루프린트를 열고, 툴바에서 클래스 세팅 옵션을 클릭합니다.

    Interface6.png

  8. 디테일 패널에서 인터페이스 아래 추가 버튼을 누른 뒤 DM_Interface 를 추가합니다.

    Interface7.png

    여기서는 이 블루프린트에서 블루프린트 인터페이스를 구현, 그 안의 함수에 접근할 수 있습니다.

  9. 그래프에 우클릭 한 다음 ? 를 검색한 뒤 Event Is Destructible? 이벤트를 선택합니다.

    Interface8.png

  10. Ctrl 키를 누르고 내 블루프린트 창에서 Destructible 컴포넌트를 끌어놓은 뒤 아래 스크립트를 만듭니다.

    Interface9.png

    위의 Destructible 컴포넌트에서 Apply Damage 를 사용하여 유리창에 대미지를 적용할 때 필요한 대미지, 강도, 위치, 방향 등의 필수 요소를 연결했습니다. 실제 대미지, 강도, 적중 위치 정보가 블루프린트 인터페이스를 통해 이 블루프린트로 다른 블루프린트에서 전달되는데, 곧 다른 블루프린트 작업을 하겠습니다.

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

  12. 콘텐츠 브라우저 에서 Content/StarterContent/Blueprints 아래, Blueprint_CeilingLight 블루프린트를 엽니다.

    Interface10.png

    블루프린트 인터페이스를 사용해서, 이 라이트를 쏘면 조금 다른 작업을 하겠습니다.

  13. 클래스 세팅 을 통해 DM_Interface 를 추가한 뒤, PointLight1 를 끌어놓고 아래와 같이 스크립트를 만듭니다.

    Interface11.png

    여기서 Event Is Destructible? 이 호출되면, 먼저 라이트를 초록색으로 설정해 주겠습니다. 두 번째 호출되면, 세기를 0 으로 설정합(라이트를 끕)니다. 참고로 인터페이스에 저장된 Damage, Strength, HitLoc 정보는 이 블루프린트에 관련이 없어 사용하지 않았습니다. 블루프린트 인터페이스를 사용하면 그 인터페이스와 함수를 구현하는 모든 블루프린트에서 호출되는 범용 함수를 만들고, 각각의 블루프린트에서 실행할 스크립트 내용을 결정할 수 있습니다.

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

  15. 콘텐츠 브라우저 안에서 Content/FirstPersonBP/Blueprints 아래, FirstPersonProjectile 블루프린트를 엽니다.

    Interface12.png

    이 블루프린트에는 플레이어가 무기를 발사할 때 게임내 스폰되는 프로젝타일에 대한 스크립트가 들어있습니다.

  16. 클래스 세팅 을 통해 DM_Interface 를 추가한 다음, 그래프에 우클릭 하고 IsDestructible?(Message) 노드를 추가합니다.

    Interface13.png

    여기서는 IsDestructible? 함수를 실행하고, 그 인터페이스와 함수를 구현하는 블루프린트도 전부 실행됩니다.

    노드가 보이지 않는 경우, 컨텍스트 메뉴 우상단의 컨텍스트에 따라 옵션 체크를 해제하면 됩니다.

  17. Branch (분기)의 False 핀에서 IsDestructible? 노드를 연결하고 OtherHitLocation 핀을 연결합니다.

    클릭하면 원래 크기로 봅니다.

    위에서, 맞은 오브젝트가 물리 시뮬레이션 여부를 검사하는 스크립트를 추가했습니다. 물리 시뮬레이션이 아닌 경우, 블루프린트 인터페이스의 IsDestructible? 함수를 호출하고, 타깃에 1000 대미지와 100 강도를 적용합니다 (타깃은 Event Hit 노드의 Other 핀에서 수집되며, 여기서는 Hit Location 을 구하여 HitLoc 변수에 저장 후 전달합니다).

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

  19. SM_GlassWindow_DMBlueprint_CeilingLight 블루프린트를 레벨에 끌어놓은 뒤 플레이 를 클릭하여 에디터에서 플레이합니다.

    유리를 쏘면 산산히 부서집니다.

    Example1.png

    라이트를 한 번 쏘면 윗 단계에서 지정한 색으로 바뀝니다.

    Example2.png

    라이트를 한 번 더 쏘면 꺼집니다.

    Example3.png

블루프린트 인터페이스 를 사용하여 블루프린트끼리 변수를 전달하고, 그 인터페이스를 구현하는 블루프린트에서 다양한 스크립트를 실행하는 함수 호출에 대한 한 가지 예를 살펴봤습니다. 블루프린트 인터페이스 및 기타 블루프린트 통신 유형 작업 관련 상세 정보는, 아래 관련 토픽 부분을 참고하시기 바랍니다.

태그