본문 바로가기
개발일지/Unreal&C++

[Unreal] Blueprint를 활용한 물체 충돌 구현, 효과 주기

by 쫌눈 2025. 3. 18.
728x90
반응형

시작하기 앞서

언리얼은 유니티와 다르게 엔진이 꽤..자주 꺼지는 편인 것 같다.

힘들게 만든 작업물을 날리고 싶지 않다면 컴파일, 저장 습관을 기르도록 해야한다.

우측 하단에 저장이 되어있는지 저장이 안되어있는지 친절하게 알려주니 자주 확인하며 저장하는 습관을 기르자.

저장을 하지않으면 메모리에만 쌓이고, 엔진이 꺼지면서 메모리도 같이 죽어 내용물이 다 날라가는.. 슬픈 광경을 볼 수 있다.

 

블루프린트 기본

콘텐츠 브라우저에 새로운 폴더(Blueprints)를 생성한다.

Blueprints 폴더 안에서 우클릭 후 Blueprint class를 선택한다.

Actor클래스를 선택한다. 다른 클래스들은 포스팅을 업데이트 하면서 채워가겠다.

언리얼 네이밍 규칙 명명에 따르면 블루프린트는 BP_의 접두사를 가져야 하므로, BP_CollisionTest로 이름지어 만든 후 파일을 오픈한다.

처음에 파일을 열면 아래와 같이 아무것도 없는 뷰포트가 보일텐데, 여기에 메시를 추가하여 물체의 형상이 보이도록 처리하겠다.

아무것도 추가하지 않은 날것의 액터 블루프린트 클래스

우측 상단의 Components에서 Spere를 추가한다.

해당 부분에 없다면 스크롤을 내려 Basic Shapes를 확인하면 된다.

언리얼은 툴팁이 굉장히 잘 되어있는 것 같다. static mesh component는 UStaticMesh 인스턴스를 만드는 데 사용되고, static mesh는 폴리곤의 static set으로 구성된 지오메트리라고 한다.

생성된 Sphere을 위로 올려, Root로 놔둔다.

컴파일@@ 저장@@

충돌 방식

충돌(Collision)은 처리방식에 있어 우리가 꼭 알고 있어야 하는 규칙이 몇개 있다.

  • Ignore
    • 두 오브젝트간 충돌이 완전 무시된다.
    • 어떤 이벤트도 발생하지 않는다.
    • 두 오브젝트는 통과된다.
  • Overlap
    • 두 오브젝트는 통과되지만 Overlap이벤트가 발생한다.
    • 물리적 충돌은 일어나지 않는다.
  • Block
    • 오브젝트들이 서로 통과하지 못하고 물리적으로 충돌한다.
    • Hit이벤트가 발생하며 충돌시 오브젝트들이 서로를 밀어낸다.
    • 양쪽 오브젝트 모두 Block으로 설정되어 있어야 한다.

Block > Overlap > Ignore순으로 우선순위가 적용된다.

아래 예시 참고

ignore↔ignore, overlap↔overlap, block↔block

충돌 시 Material 효과 주기

M_Emissive머테리얼을 만들어 BP_CollisionTest의 Material에 씌운다.

M_Emissive 머테리얼을 Material폴더에 만든 후 머테리얼 편집 페이지를 연다.

Emissive는 아래 링크 참고

https://jjomnoon-diary.tistory.com/49

 

[Unreal] 머테리얼(Material)/PBR (v5.4)

Material이란?사실은 쉐이더다. 공식 문서에서는 씬에서의 오브젝트 표면 프로퍼티 정의라고 한다.언리얼 엔진의 쉐이더는 HLSL로 작성되어있으나 언리얼 에디터에서는 비주얼스크립팅으로 머테

jjomnoon-diary.tistory.com

기본 컬러와 발광이 될 컬러를 선택한다.

Emissive는 0~1사이값인 다른 파라미터들과 달리 1이상의 값을 쓸 수 있다.

그러므로 눈에 띄게 발광효과를 주기 위해 큰 값을 곱하여 Emissive color의 파라미터에 입력한다.

B에서 우클릭하여 Promote to Parameter를 클릭하여 파라미터로 변경한다.

나는 가독성을 위해 EmissiveValue로 설정하겠다.

좌측부터 순서대로 Emissive Value값 0, 100

Apply+Save

이와같이 발광 처리가 되므로, 충돌 시 발광이 되도록 블루프린트를 짜보자.(값은 다시 0으로 설정한다.)

BP_CollisionTest의 Material을 M_Emissive로 변경한다.

그리고 BP_CollisionTest의 충돌 설정을 Overlap으로 설정한다.

충돌체가 Sphere에 있기 때문에 Sphere를 선택한 후 설정한다.

그리고 플레이어와 충돌 시 발광 효과를 내야 하므로, 충돌한 대상이 플레이어인지 확인해야 한다.

여러가지 방법이 있는데, 두가지만 예시를 들겠다.

플레이어 객체 비교

GetPlayerPawn이라는 노드가 있다. 해당 노드를 가져와 동등비교(==) 하여 Material의 파라미터에 세팅한다.

EmissiveValue가 스칼라값이므로 SetScalar Parameter Value를 사용한다.

Sphere에 Material이 있으므로, Sphere에서 Material값을 변경할 수 있게 노드를 끌어와 사용한다.

태그 비교

플레이어에 태그를 넣어야 한다.

실행한 후 생기는 캐릭터의 Edit BP_~~~를 클릭한다.

해당 블루프린트의 Detail 메뉴에서 tag를 검색한 후 Player를 추가한다.

컴파일@@저장@@

다시 BP_CollisionTest로 돌아와 노드를 만든다.

그러고 실행을 하면 아래와 같이 된다.

이제 충돌이 끝났을 때 발광효과를 취소하는 블루프린트를 작성한다

 

728x90
반응형