본문 바로가기

언리얼엔진

24. 머티리얼 / Construction Script / Overlap

          (클래스 디폴트)                 (Movement Component)           (Movement Component)

Use Controller Rotation Yaw > Orient Rotation to Movement > Use Controller Desired Rotation

 

점점 상위에 적용되는 내용으로, 앞의 기능이 체크되어있다면 하위의 기능들은 모두 무시된다.

따라서 Use Controller Desired Rotation 기능을 사용하기 위해선 앞의 두 기능을 모두 꺼야 한다.

 

위의 기능들을 통해서 무기 해제 / 장착 시 각각 플레이어의 회전이 다르게 설정해줄 것이다.

WeaponA / B를 장착하는 로직에서 위의 기능을 껏다 켜주면 해결될 것이다.

 

따라서 몽타주 재생 후, Notify 호출하여 Is Armed를 검사하는 과정에서 Orient Rotation To Movement를 껏다 켜준다.

하지만 앞서 Character Movement에서 Use Controller Desired Rotation / Orient Rotation To Movement 두 기능을 모두

켜두어야 한다.

Movement에서 Set Orient Rotation To Movement노드를 이용


머티리얼(Materials)

현재 Player 캐릭터와 구분 짓기 위해서 Enemy 캐릭터의 머티리얼 색상을 바꿔줄 것이다.

콘텐츠/Meshes/Mannequin/Character/Materials 폴더 안의 Body, ChestLogo 머티리얼의 인스턴스를 생성해줬다.

 

* 머티리얼 인스턴스 : 머티리얼을 기반으로 한 파라미터화된 머티리얼

                                   따라서 머티리얼의 출력 로직은 같지만 해당 머티리얼에 들어가는 재료만 바꿔줄 수 있는 것.

 

머티리얼 인스턴스의 디테일

머티리얼 인스턴스에서 바꾸고자 하는 옵션을 체크해야만 바꿔줄 수 있다.

하얀색인 플레이어와 대비되도록 적은 검은색으로 적용시킬 것이다.

Body, ChestLogo 둘 다 색을 변경시켜줬다.


변경한 머티리얼 인스턴스를 적용시켜주기 위해선 몇가지 방법이 있다.

레벨에 직접 올린 Enemy 인스턴스에 직접 드래그하여 원하는 위치에 놓으면 바로 머티리얼이 적용되는 것을 볼 수 있다.

머티리얼 인스턴스를 드래그 드롭하여 적용

 

하지만 이 방식은 해당 Enemy 인스턴스에만 적용된 것이라서 바로 다른 Enemy 인스턴스에는 적용되지 않는 모습이다.

따라서 BP_Enemy 클래스에서 직접 적용해준다.


TextRender

플레이어가 공격 시, 무기의 Collider이 적의 Collider에 닿았을 때 충돌 처리를 해줌으로써 데미지를 입는다.

먼저 Box Collison을 통해서 언리얼 엔진의 충돌 처리에 대해 알아보자.

 

BP_Box 클래스의 내부

새로 만든 BP_Box에 Box Collision과 TextRender를 통해 충돌 검사를 할 것이다.

Hidden in Game을 해제해 Box Collision이 플레이 화면에서도 보이도록 해주고,

Text Render의 Horizontal / Vertical Alignment를 중점에 맞도록 설정해줄 수 있다.

 

여기서 TextRender는 Box의 클래스 이름을 출력해줄 것이다.

BP_Box의 이벤트그래프에서 실행과 동시에 클래스의 이름을 가져와 Text에 설정하여 화면에 나오는 것을 볼 수 있다.

플레이 시 나오는 Class의 이름


Construction Script

만약 플레이 전에 어떤 Text가 뜨는지 확인하고 싶다면 Construction Script를 활용하면 된다.

이러면 뷰포트 또는 레벨에 미리 생성된 인스턴스에서 Text가 나오는 것을 확인할 수 있다.

BP_Box 자체를 사용할 것은 아니므로 클래스 세팅에서 추상클래스화 시켜주고, 자손 클래스 BP_Overlap을 생성한다.


충돌

언리얼에서의 충돌 반응

1. 무시(충돌 반응을 하지 않음)

2. 곂침(Overlap)

3. 막힘(못 지나가도록 막음)

 

이번에 우리가 사용할 충돌 반응은 Overlap(곂침)이다.

항상 이벤트그래프에 기본적으로 생성되어 있던 ActorBeginOverlap 이벤트가 바로 우리가 쓸 Overlap 충돌이다.

 

* ActorBeginOverlap : 해당 클래스에 소속된 어떤 Collision Component라도 충돌하게되면 바로 이벤트 호출이 된다.


※ 만약 Tick 이벤트를 사용하지 않는다면, 클래스 디폴트의 Start with Tick Enabled를 꺼주는 것이 좋다.


이벤트그래프에서 충돌하는 Object의 클래스 이름을 출력해줄 것이다.

이제 BP_Overlap을 레벨에 배치 후, 플레이어가 Overlap과 곂칠 때 Play와 무기의 클래스 이름이 뜨는 것을 볼 수 있다.

BP_Overlap 이벤트그래프


클래스의 해당 Collision에는 모두 Generate Overlap Events가 있다.

- Generate Overlap Events : Overlap(곂침) 이벤트를 발생시킨다.

 

이 기능은 Overlap 이벤트를 사용하고 싶은 모든 대상들이 전부 켜져있어야만 한다.


On Component Begin Overlap

어떤 컴포넌트에서 충돌했는지 알기 위해선 해당 Collision Component에서 On Component Begin Overlap을 사용한다.

여기서 보이는 이벤트들은 해당 Component가 사용할 수 있는 이벤트들이다.


- Overlapped Component : 자기 자신 컴포넌트 레퍼런스(Box)

- Other Actor : 충돌한 상대

- Other Comp : 충돌 상대의 컴포넌트

- Other Body Index

- From Sweep 

- Sweep Result

 

※ Sweep

Set Location을 통해 캐릭터의 이동을 구현한다고 해보자. 그럼 프레임마다 달라지는 위치로 이동하지만 연속적인 이동이 아니다. 따라서 연속적인 이동을 처리해야하는 부분이 있다면 문제가 생길 수도 있다.

여기서 Sweep의 기능을 사용하게 된다면 Location으로 이동한 프레임 사이에 빈 부분을 연속적인 이동을 한 것으로 처리해준다.