Unreal Engine5/KDT 2024

[UE5 KDT2024] 7. 트리거 (키눌림) 차이, 언리얼 빌드 시스템

유잉유잉유잉 2025. 2. 19. 00:05
728x90

 

1. 입력 컨텍스트에서 

트리거 - 인덱스 설정에 다른 차이를 알아보자

 

1) IA_Test 입력액션 추가 후, IA_Context에 IA_Test추가.

 

(1) 두개 추가 후, 트리거와 시간 한계치 설정

ㄴ 언리얼에서 언리얼 기능 테스트시 블루프린트가 편할 수 있음

 

2) BP_Character 블루프린트에 

IA _TEST추가해서 함수마다 PrintString 붙여줘서 테스트준비

 

3) 디폴트 폰 클래스를 BP_Character로 변경 하고 실행



▶️ 길게 누르기 : Hold 입력 결과

ㄴ Start -> OnGoing .. 

ㄴ 2초 안지났으면 OnGoing 반복 .. OnGoing 

ㄴ 2초 안지나고 떼면 OnGoing  -> 뗌 -> Canceled

ㄴ 2초 지나면 OnGoing -> 2초지남 -> Trigger -> .. -> Trigger (떼기 전까지)

ㄴ 2초 지나고 떼면 Trigger-> 뗌 -> Complete

 

 

▶️  길게 누르기 및 해제 : Hold and Release

ㄴ Start -> OnGoing .. 

ㄴ 2초 안지났으면 OnGoing .. OnGoing 

ㄴ 2초 안지나고 떼면 OnGoing  -> 뗌 -> Canceled

ㄴ 2초 지나면 OnGoing -> 2초지남 -> OnGoing -> .. -> OnGoing (떼기 전까지)

ㄴ 2초 지나고 떼면 OnGoing -> 뗌 -> Trigger -> Complete

 

 

✅  길게 누르기와 길게 누르기 및 해제의 차이 

지정한 시간이 지나면

길게 누르기 : Trigger 상태로 변함

길게 누르기 및 해제 : OnGoing 상태 유지.




 

▶️  눌림

Pressed

한번만 처리됨.

꾹눌러도 한번만 처리



 

▶️  다운

Down

눌린 프레임만큼 Trigger 처리. 뗄 때 Completed

 

▶️ 


0.2초(시간한계치)를 넘어서도 탭을 누르고 있을 경우 -> 마지막 Canceled


0.2초 (시간 한계치) 이하로 눌릴 경우 
-> 놓았을때 Trigger -> Completed
ㄴ 눌림과 비슷하지만 
눌린 프레임만큼 OnGoing 호출 


 

0.2초(시간한계치)를 넘어서도 탭을 누르고 있을 경우 -> 마지막 Canceled

 

 

 

0.2초 (시간 한계치) 이하로 눌릴 경우 

-> 놓았을때 Trigger -> Completed

ㄴ 눌림과 비슷하지만 

눌린 프레임만큼 OnGoing 호출

 

 

 

▶️  펄스

간격 : 시간간격 

트리거 제한 : 0으로하면 무제한 

Start -> 첫프레임은 Trigger -> 시간 간격 사이 OnGoing호출 -> 시간간격(0.1초마다) Trigger호출 -> 반복 … -> 떼면 -> Canceled 



 

▶️  콤보 ( 베타 )

시간내에 입력된 콤보가 순서대로 모두 눌리면 Trigger 발생 

 

▶️ 코딩된 액션 (Chorded Action)

: 트리거 되기 위해 다른 특정 액션이 Triggerd 되어 있어야 하는 액션.

ex) 점프 공격은 점프 액션이 선행되어 있어야 트리거 될 것.

ex) 특정 키 입력 조합이 입력 되어야 트리거 됨 => ctrl + c 를 같이 눌러야 복사  

 

1) 생성

(1) IA_CodingAction 입력액션 추가 

(2) IA_Context - IA_Test 내 추가 - 인덱스  코딩된 액션 추가, 코드액션에 IA_CodingAction 설정

(3) IA_Context 에 IA_CodingAction 추가 

(4) 블루프린트에 테스트 출력 함수 연결

(5) 실행 후 

5를 누르면 반응없음

6을 누르면 coding trigger 출력됨

5를 누른상태에서 6을 누르면 TestTrigger 출력  

6을 누른상태에서 5를 누르면 coding trigger 출력



 


 

 

2. [이론] 언리얼 빌드 시스템 

 

▶️언리얼만의 빌드 시스템을 가지고 있다 UBT (Unreal Build Tool)

  • C++ 소스들의 빌드 과정 총괄하는 프로그램.

 

▶️ 프로젝트 생성시 3개의 C#파일이 생성

1) 프로젝트명.Build.cs

  • 빌드 옵션을 관리 (PCH쓸건지, 외부 모듈 쓸건지)
  • 시작파일.
  • 추가할 언리얼 모듈 체크 (PublicDependencyModuleNames)
    • 언리얼은 기능을 모듈로 분리함. 
    • 모듈 추가시 PublicDependencyModuleNames.AddRange 여기나 private에 추가하면 됨

2) 프로젝트명.Target.cs 

  • 빌드 타입을 정의한다. : 어떤 모듈을 빌드에 포함 시킬 건지, 어떤 타입의 빌드 결과물을 만들건지 (dll, exe)
  • 타겟 : 윈도우인지, 모바일인지 

3) 프로젝트명Editor.target.cs

 

▶️ 공식링크 : DedecatedServer용 target.cs를 만드는 방법인데, target.cs 이해하기 좋음

 

시작시 위 두개의 파일을 읽음 

 

빌드구성 : 개발, 디버그, 출시, 테스트 등 다양한 빌드 구성 지원

플랫폼 지원 : 크로스플랫폼 빌드를 지원, 각 플랫폼에 맞는 툴체인과 설정을 자동으로 지원 -> Target.cs

 

모듈시스템 : 언리얼 엔진은 모듈 단위로 구성되어 있으며

ubt는 각 모듈의 빌드 규칙을 정의한 *Build.cs 파일을 기반으로 빌드 



▶️ 언리얼 리플렉션 시스템

객체가 런타임 중에 자기 자신을 탐색하고 조작할 수 있는 기능

 

주요기능

  • 클래스, 구조체, 열거형, 변수 등의 메타 데이터등을 런타임에 검색
  • 객체의 속성(변수) 값을 런타임에 읽고 쓰기
  • 함수 호출을 런타임에 동적으로 수행
  • 블루프린트에 c++코드, 함수를 노출
  • 네트워크, 가비지 컬렉션 기능 지원

 

리플렉션 시스템을 통해 자신의 루트를 쫓아갈 수 있다. 

 

▶️에디터를 실행하거나 솔루션 빌드 -> 언리얼 빌드 툴(UBT)이 실행됨 

-> Target.cs, Build.cs파일들이 c# 컴파일러에 의해 컴파일됨.  

-> 모듈 시스템은 빌드 하는 중에 Unreal header tool(UHT)를 호출한다. 

-> UHT는 언리얼 c++의 들어간 헤더 파일들을 조사하여 리플렉션 데이터를 생성

- UHT가 작업 끝나면 생성된 리플렉션 데이터는 헤더파일의 GENERATED_BODY()로 들어간다

-> 빌드그래프 생성 (.xml) : 빌드 후처리 여기서

->  c++ 컴파일러 실행 

좀더 자세한 설명 링크 

 

▶️ 언리얼 헤더 툴(Unreal Header Tool, UHT) 는 UObject 시스템을 지원하는 맞춤형 파싱 및 코드 생성 툴입니다. 

  • c++코드들을 컴파일 하기 전에 모든 헤더 파일들을 순회하면서 리플렉션 시스템에 필요한 정보들을 읽어들인 후, .generated.h파일과 .gen.cpp 파일을 Intermediate 폴더에 생성하는 소프트웨어다.
  • 컴파일 전 클래스를 분석하여 언리얼 오브젝트 정보를 담은 메타 데이터를 생성한다.
    • 메타 데이터는 UClass라는 클래스에 보관되며 클래스 계층구조, 멤버변수, 함수 가 저장된다.
    • UClass 클래스에 보관된 데이터 덕분에 Reflection이 가능해진다.
  • 바이너리 파일 위치 : (언리얼 버전)\Engine\Binaries\DotNET\UnrealBuildTool\EpicGames.UHT.dll
    • exe 파일이 아니라 dll 파일인 것에서 알 수 있듯, 독립적으로 실행되는 프로그램이 아니라 UBT같은 다른 프로그램의 모듈 방식으로 포함되는 프로그램이다. 

코드 컴파일은 두 단계로 이루어집니다.

 

1) 언리얼 관련 클래스 메타데이터의 C++ 헤더를 파싱하고 여러 UObject 관련 기능을 구현하는 맞춤형 코드를 생성하는 UHT가 호출됩니다.

2) 일반 C++ 컴파일러가 호출되어 결과를 컴파일합니다.



▶️ UHT의 동작방식 

빌드 시작 -> UBT 실행 -> UBT는 c++ 컴파일러 실행 전에 UHT을 실행 

-> UHT의 작업

  • 헤더 파일들을 파싱하고 ~.generated.h파일과 ~.gen.cpp 파일들에 

UPROPERTY, UFUNCTION, UCLASS 등 매크로 선언된 정보들을 저장하는 역할을 수행한다.

-> 위 과정 완료시 UHT 작업은 끝남 -> 일반 c++ 컴파일러가 UHT가 생성한 코드를 포함하여 c++ 컴파일을 수행.



▶️ UHT 존재 이유 

언리얼은 자체적으로 리플렉션 시스템을 구현하기 위해서 UCLASS(), UPROPERTY(), UFUNCTION()등의 매크로를 사용하는데 이 매크로를 해석해서 c++ 컴파일러가 알아들을 수 있게 코드를 재생성( .generated.h, .gen.cpp) 해주는 작업이 필요하기 때문.



▶️ 위 내용이 잘 정리되어있는 링크 

 

생성되면 generate_body()에 들어가게됨. 

 

빌드 그래프 (.xml)  : 빌드 후처리 등

 

c++ 소스코드가 만들어지면 소스코드를 c++ 컴파일

 

▶️ Unreal header tool 사용하는 매크로

UCLASS

클래스를 리플렉션 시스템에 등록

 

UFUNCTION

함수를 리플렉션 시스템에 등록

 

UPROPERTY  

변수(프로퍼티)를 리플레션 시스템에 등록

  • 프로퍼티에 들어가는 옵션도 매크로에 해당. ex) VisibleAnyWhere

 

USTRUCT

구조체를 리플렉션 시스템에 등록 

 

UENUM -> 언리얼에서 사용하는 enum

열거형을 리플렉션 시스템에 등록 



728x90