본문 바로가기

언리얼C++게임개발/09.충돌 설정과 대미지 전달

언리얼 엔진에서의 충돌 설정

게임은 엔진을 통해 가상의 물리 법칙을 받는 공간이다
오늘은 언리얼 엔진에서 제공하는 다양한 콜리전 설정과 그 방법에 대해 알아보겠다

콜리전 제작 방식

콜리전을 제작하는 방식으로는 크게 3가지가 있다

  • 스태틱메시 애셋 방식
  • 기본 도형 컴포넌트 방식
  • 피직스 에셋 방식

스태틱메시 애셋 방식은 스태틱메시 에셋에 콜리전 영역을 심는 방식이다
보여지는것 그대로 충돌하게 되어 관리에 용이하다

기본 도형 컴포넌트 방식은 구체, 박스, 캡슐 등의 기본 도형을 사용해 충돌을 처리하는 방식이다
이 방식은 스켈레탈 메시를 사용할때 주로 이용된다

피직스 에셋 방식은 Ragdoll 효과를 구현할때 캐틱터에서 캡슐 컴포넌트 대신 사용한다
이 방식은 스켈레톤 메시에서만 사용할 수 있다

 

충돌영역을 설정했다면 활용방식을 지정할 수 있다

이들은 기본적으로는 Block All(접근 불가) 상태이며 방식을 지정함에 따라

플레이어와 상호작용이 가능해진다

설정은 크게 3가지로 구분된다

  • 콜리전 채널과 기본 반응
  • 콜리전 채널의 용도
  • 다른 콜리전 채널과의 반응

콜리전 채널

언리얼 엔진은 8가지 콜리전 채널을 제공한다

각각의 용도는 다음과 같다

WorldStatic 움직이지 않는 정적인 배경액터에 사용하는 콜리전 채널, 주로 스태틱 메시에 있는 스태틱 메시 컴포넌트에 사용

WorldDynamic 움직이는 액터에 사용하는 콜리전 채널, 블루 프린트에 속한 스태틱 메시 컴포넌트에 사용

Pawn 플레이어가 조종하는 물체에 주로 사용

Visibility 물체가 시각적으로 보이는지 탐지하는데 사용, 물건을 잡는 기능을 구현할때 사용

Camera 카메라와 목표물 간에 장애물이 있는지 탐지하는데 사용

PhysicsBody 물리시뮬레이션으로 움직이는 컴포넌트에 설정

Vehicle 자동차를 구성하는 채널

Destructive 물체가 파괴되는 것을 구현할때 사용


캐릭터 컴포넌트의 Collision 설정

캐릭터 컴포넌트는 ObjectType이 기본적으로 Pawn 으로 되어 있다

이때 Collision Enabled 항목은 Collision Enabled(Query and Physics) 로 되어 있는데 설정 가능 값은 다음과 같다

  • Query 두 물체의 충돌 영역이 겹치는지 테스트, 겹쳤을떄 BeginOverlap 이벤트가 발생한다
    (Raycast나 Sweep 기능도 Query에 속함)
  • Physics 물리적인 시뮬레이션을 사용할때 설정
  • Query and Physics 두 기능을 모두 사용할 때 사용

Collision Responses에는 다른 채널과 어떻게 반응할 지 지정이 가능하다

각각

  • Ignore 충돌을 무시함
  • Overlap 충돌은 무시하지만 이벤트를 발생시킴
  • Block 이동이 막힘

이 있다


새로운 채널 생성하기

콜리전 채널은 Edit - project Setting - Collision 에서 가능하다

New Object Channel 을 누르고 ABCharacter 를 생성해주자 Default Response는 기본값인 Block 으로 둔다

이번에는 Preset을 만든다 이름은 ABCharacter, CollisionEnabled 는 Query and Physics 로 해주고
Object 타입은 ABCharacter 로 해준다

프리셋이 완성되면, 기존에 존재하던 프리셋들이 ABCharacter 프리셋과 어떻게 반응할지 지정해주어야한다

설정은 이렇게 해주자

  • OverlayAll : Overlap
  • OverlapAllDynamic : Overlap
  • IgnoreOnlyPawn : Ignore
  • OverlapOnlyPawn : Overlap
  • Spectator : Ignore
  • CharacterMesh : Ignore
  • Ragdoll : Ignore
  • Trigger : Overlap
  • UI : Overlap

마지막으로 만든 프리셋을 캐릭터의 기본 프리셋으로 지정해주자

ABCharacter.cpp

// Fill out your copyright notice in the Description page of Project Settings.


#include "ABCharacter.h"
#include "ABAnimInstance.h"

// Sets default values
AABCharacter::AABCharacter()
{
 	...
    
	GetCapsuleComponent()->SetCollisionProfileName(TEXT("ABCharacter"));
}

마지막으로 우리가 지정한 ABCharacter 프리셋이 잘 적용되었는지 확인해준다

'언리얼C++게임개발 > 09.충돌 설정과 대미지 전달' 카테고리의 다른 글

콜리전 설정  (1) 2024.02.06