본문 바로가기

UnrealEngine

[UE] BPI, 이벤트 디스패처, 액터 컴포넌트 블루프린트, 렉돌

⇒ 루트 컴포넌트는 월드와 똑같아 상대적 좌표를 줄 수 없음. 그래서 상대적 위치 좌표를 줬는데도 액터가 월드좌표를 기준으로 움직인다면 해당 컴포넌트가 루트 컴포넌트로 되어 있지는 않은지 확인.

 

BPI 방법 사용

⇒ 블루프린트 인터페이스를 사용하여 상속과 같은 기능 구현. → 공용으로 사용하는 특정 소켓을 만든다는 느낌. 원하는 인터페이스를 계속해서 추가하여 사용할 수 있음. 하나의 상속만을 받을 수 없는 블루프린트에서 사용가능한 좋은 방법

 

1. 원하는 블루프린트 클래스의 클래스 세팅에서 구현된 인터페이스에 생성한 블루프린트 인터페이스를 선택

2. 선택하면 컴포넌트 창에서 인터페이스 탭이 생기고 그 안에 블루프린트 인터페이스의 함수가 생성된다.

⇒ 한 BPI안에서 두 개의 함수 생성 가능.

 

⇒ 액터 배열의 Element가 해당 BPI를 가지고 있을 경우를 판별하는 함수 사용

⇒ 해당 BPI를 가지고 있을 경우, 해당 BPI에 있는 함수를 실행.

 

⇒ 컴포넌트 오버랩 종료 시에는 BPI에 DoStop이라는 함수를 하나 더 만들어 위와 같은 방법으로 사용.

 

좌측: MoveLeftRight에서의 사용 방법

우측: TimelineLeftRight, MoveRact, Timer에서의 사용 방법.

 

매크로는 상속해도 사용 불가능. 이벤트 디스패처 사용. BPI 필요 없음

1. 이벤트 디스패처 생성

2. 입력 변수 추가 후 이벤트 디스패처 호출

이벤트 디스패처를 받는 변수 생성. 이때 눈을 뜬 상태(Public)로 만들어서 레벨 에디터에서 수정 가능하도록 설정.

 

⇒ 레벨 에디터에서 디폴트 값을 선택할 수 있음

이벤트 디스패처 호출 시 실행할 BP_Class에서 변수 생성 후 만든 이벤트 디스패처 바인딩→ 호출은 이벤트 디스패처 생성 BP_Class에서만

 

⇒ 이벤트를 따와서 EventDispatchers 이벤트 생성. 이벤트 생성 후 모습

 

이벤트 디스패처에서 입력 변수 추가.

⇒ 입력값의 형태와 개수, 위치, 순서가 같아야 함수 호출 가능(입, 출력 모두) → 일치하는 함수 또는 이벤트 생성으로 쉽게 생성 가능

 

⇒ 이벤트 디스패처를 이용한 최종 이벤트 그래프

 

1. 각 BP_Class에서 이벤트 디스패처 바인딩 방법

2. BP_MoveLeftRight에서 바인딩한 이벤트 함수 그래프

3. 나머지 BP_Class에서 바인딩한 이벤트 함수 그래프

⇒ BreakPoint. 디버깅 시 사용

⇒ 어디서부터 이벤트가 들어왔는지 경로를 다 알 수 있다.

 

액터 컴포넌트 블루프린트 사용

액터 컴포넌트 BP 생성, 액터 컴포넌트 BP 내부에서 함수와 이벤트 디스패처 생성

 

해당 액터 컴포넌트 BP를 임의의 BP_Class에 추가하면 오른쪽처럼 생성된 이벤트 디스패처 이벤트를 사용할 수 있다.

디테일 창의 이벤트 탭에서 +로 이벤트 생성 가능

 

⇒ 액터 컴포넌트를 활용한 이벤트 처리 결과

 

⇒ SwitchBox에서 GetAllActorsofClass로 모든 액터 BP를 가져온 뒤, 해당 액터가 액터 컴포넌트 BP를 가지고 있다면 액터 컴포넌트 BP의 함수를 실행. IsValid는 ReturnValue가 null값인지 아닌지 확인. IsValid는 값을 가지고 있다는 뜻 → 함수 실행.

 

총알 발사 로직

⇒ Get Actor ~ Vector: 해당 방향으로 움직임, 단위 벡터.

⇒ normalize: 다신 단위 벡터로.

⇒ make는 한번 만들고 사라짐

⇒ 벡터를 0으로 두면 길이가 짧아짐(3차원 → 2차원). 따라서 단위벡터로 만들어줘야 함

 

 

SpawnActor BP_Class → 액터 스포너

⇒ 변수로 만들어 여러 가지 액터로도 설정 가능

 

⇒ 캐릭터가 충돌 시 밀려남. 방향을 반대로 밀어주기 위해 NormalImpulse에 -1을 곱하여 사용. 속도가 너무 빠르면 콜리전을 뚫고 지나가기 때문에 속도 설정이 중요.

 

렉돌

 

 

 

→ ThirdPersonMap

⇒ 이벤트 그래프

⇒ DoGetUp

⇒ DoRegdoll