초보 코린이의 성장 일지

UE4 C++ ComponentOverlap, Hit, Trigger, Light 본문

언리얼

UE4 C++ ComponentOverlap, Hit, Trigger, Light

코오린이 2023. 3. 10. 15:32

1. Component 충돌을 위해 생성해준다.

 

C02_ComponentOverlap.h
C02_ComponentOverlap.cpp
C02_ComponentOverlap.cpp

1. 필요한 .h 추가후 생성해준다.

2. 충돌되었는지 확인을 위해 만들어 놓은 Log를 사용한다.

 

1. 블루프린트 클래스를 추가해준다.

 

1. 충돌, 충돌 후 둘다 정상적으로 Log가 출력되는걸 확인 할 수 있다.

 

1. Hit된 상태도 확인해보기 위해 생성해준다.

C03_OverlapAndHit.h
C03_OverlapAndHit.cpp
C03_OverlapAndHit.cpp

1. C02_ComponentOverlap와 동일하다 로그로 확인해 볼것이기 때문에 복사해서 가져오면 된다.

2. Hit가 계속 일어나는지 확인하기 위해 OnComponentHit를 추가해준다.

 

 

1. 생성 후 맵에 올려준다.

1. Box에 Simulation Generates를 충돌하게 만들어 주기위해 켜줘야하며, 객체 끼리 충돌할때 켜줘야하는 쪽은 충돌을 받는 쪽이 켜주는게 옳은 방법이다.

 

Query Only = 겹침 연산만 가능

Physics Only = 블록 연산만 가능

Collision Enabled = 둘다 가능

1. Physics Only로 설정하면, Cube는 충돌되면서 로그에 나오고, 캐릭터는 통과된다 

2. 블록 연산만 했기 때문.

1. Collision Enabled로 설정해줌으로써, 둘다 연산이 가능하게 되었다.


1. 이제 더 다양한 이벤트 반응들을 다뤄보기 위해 Delegate를 하나씩 만들어서 확인해 볼 것이다.

2. Trigger를 생성해준다.

 

1. Single인 Delegate라 이름만 지어주고 생성해준다.

 

C04_Trigger.h
C04_Trigger.cpp

1. 만들어지는 과정은 다른 이벤트와 동일하다.

2. 이벤트가 잘 연결되어있는지 조건 체크를 해준다.

1. 블루프린트 클래스 생성해준다.

 

1. 이벤트가 연결된걸 눈으 확인할 수 있는 클래스를 하나 더 만들어서 확인해 볼 것이다.

 


Is A라고 부르는 상속 관계와, Has A라고 부르는 객체를 소유하고 있는 상황이있다.

객체를 소유하고 있다는건 해당 클래스가 수정될때 소유 받은 클래스도 수정될 가능성이 있게된다

자식에 자식에서 또 자식한테있는 어떠한 함수를 호출하게되면, 순환이 일어면서 커플링이 발생하게된다.

 

소프트웨어 설계에 가장 좋은 조건은 결합도는 낮추고, 응집도는 높이는 것이다.

결합도 = 각 클래스 간에 관계를 낮춰야한다. 다른걸 침범하지 않게 하기 위함

응집도 = 비슷한 기능들끼리 한곳에 모아서 관리를 편하게 한다.

이게 객체지향 5원칙 Solid 원칙이다.

 

함수포인터를 배열로 바꾸고 편하게 다루게 만든게 Delegation 패턴이다.

객체의 주소만 가지고 있고, 결합도를 깨트리는데 가장 좋은 방법 중에 하나이다.

[Solid 5원칙]

SRP (단일책임) = 객체는 단 하나의 책임만 가져야하며, 하나의 집중하여야 한다는 의미.

OCP (개방폐쇄) = 수정에는 닫혀있어야 하고(수정하면 해당 연관 클래스들이 수정될 수 있기 때문), 추가시에는 열려있어야한다(추가적인 기능을 끼워넣어서 추가기능을 사용하라는 것이지, 수정을 하라는 의미가 아니다).

LSP (리스코브 치환) = 부모클래스에서 기능들을 아래 자식들로 내렸을떄, 그 동작들이 정상적으로 작동되게끔 만들어줘야 한다. 

ISP (인터페이스 분리) = 모듈들이 커지게 되면, 인터페이스로 분해하여 중계자 역할로 편리하게 만들어줘야한다. 그리고 접근은 그 만들어놓은 컴포넌트나 인터페이스로 접근해야한다.

DIP (의존성역전) = 서로간에 커플링 (의존관계)가 생긴다면, 호출관계를 역으로 뒤집어서 그 관계를 깬다.


C04_Light.h
C04_Light.cpp

1. 생성을 해주고, 필요한 수치만큼 설정해준다.

2. 팬딩킬에 관련하여 Level에서 객체를 찾아낼때 조건을 체크해야 한다는걸 중요시 생각해야한다.

 

1. 블루프린트 클래스로 생성해주고, 맵에 올려 준다.

2. Level 맵에 올라가있는 객체에 관련해 Log가 출력되는걸 볼 수 있다.

 

1. 하나의 조건을 더 넣어줬다

2. 상속 받은 객체만 체크하도록 설정

3. 출력이 한개만 나오는걸 볼 수 있다.

1. 편하고 간결하게 사용하기 위해 템플릿으로 만들어줬다.

 

C04_Light.h
C04_Light.cpp

1. 시작할때 Light 꺼주고, 켜주기를 반복

 

https://www.youtube.com/watch?v=itxoYr5zBPs 

 

Comments