본문 바로가기

언리얼게임프로젝트/슈팅게임 C++

Ureal C++ Collision처리

블루프린트 슈팅개발시 했던것처럼 프로젝트세팅 콜리젼에 Player, Enemy, Bullet New Object 채널을 생성합니다. 기본 응답은 Ignore로 합니다.

2025.03.10 - [게임프로젝트/슈팅게임 블루프린트] - 충돌처리 Collision

 

충돌처리 Collision

액터들의 충돌처리를 해줍니다.BP_Bullet을 열고 Box Collision을 추가하고 root로 해줍니다. Shape Extent를 조정해 박스를 싸줍니다. BP_Enemy를 열고 역시 BoxCollisoin을 추가하고 루트로 만들고 사이즈롤 설

unreal6.tistory.com

오브젝트 채널을 블루프린트에서 지정하지 않고 코드에서 구현해보겠습니다.

프로젝트 Config폴더안 DefaultEngine.ini을 ECC_로 검색해보면 방금만든 채널의 번호를 알수 있습니다. 대략 만든 순서대로 네요

 

PlayerPawn.cpp 생성자에 다음코드를 추가 합니다.

	boxComp->SetGenerateOverlapEvents(true);
	boxComp->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);
	boxComp->SetCollisionObjectType(ECC_GameTraceChannel1);

라이브코딩후 BP_PlayerPawn을 리로드 하면 콜리전 부분이 코드처름 세팅되어져 있습니다.

이제 반응할 오브젝을 설정해야 합니다. 우선 전채널을 Ignore하고 Enemy하고만 Overlap되가 다음 코드를 추가합니다.

	boxComp->SetCollisionResponseToAllChannels(ECR_Ignore);
	boxComp->SetCollisionResponseToChannel(ECC_GameTraceChannel2, ECR_Overlap);

Enemy도 같은 작업을 해야하지만 조금 다르게 해보겠습니다.

프로젝트세탕 콜리젼  카테고리에 가면 맨밑에 Preset가 있습니다 .New를 눌르고  

Enemy 설정을하고 Player와 Bullet과 Overlap되게 체크합니다. 다른건 Ignore합니다.

EnemyActor.cpp를 열고 생성자 맨 밑에 한줄만 넣어주면 됩니다.

	boxComp->SetCollisionProfileName(TEXT("Enemy"));

BP_EnemyActor를 리로드후열고 BoxComp의 디테일의 CollisionPresets이 Enemy로 잘 바뀌어져 있습니다.

프로젝트 세팅 콜리젼 카테고리>프리셋 New를 클릭하고 Bullet을 위한 프리셋을 만듭니다,.

Bullet.cpp 생성자에 아래 코드를 추가합니다.

boxComp->SetCollisionProfileName(TEXT("Bullet"));

BP_Bullet을 리로드후 BoxComp의 디테일을 보면 Bullet콜리전 프리셋이 잘 적용되여 있습니다.