프로그래밍 공부
작성일
2024. 1. 19. 14:35
작성자
WDmil
728x90

언리얼 의 RaytoCollision을 사용해서 케릭터의 머티리얼을 변환시켜보자.

Line을 그리는 객체에 위의 블루프린트를 BeginPlay에 연결해준다.

 

시작할 때, Player객체를 확인하고, 해당 객체의 Mesh데이터를 참고하여 Material을 변수로 받아온 다음, 해당 캐릭터의 Mesh데이터를 참조하여 Mesh데이터를 새로만드는 DynmaicMaterial instance로 변환해준다.

 

그렇게 하면, BodyMaterial에 Player의 Material데이터를 받아올 수 있다.

 

이제 이 정보를 수정해보자.

TickRate에 대해 충돌검사 판별하는 코드부분을 수정하자.

충돌시를 판별하여, 충돌했을 경우, 해당Actor를 Break하여, HitActor를 받아온다음, 이 데이터를 BP_Player에 형변환하여 대입한다.

 

Character에 형변환 하지 않는 이유는, Character에는 Material이 없기 때문이다.

 

이제, BP Player에 대해 IsValid를 검사하여, 변환이 가능할경우, False가 아닐경우, VectorParameterValue에서 BodyColor값에 개입하여 Color를 변환해주면 된다.


폭발처리

 

오브젝트의 폭발을 정의하고 적용해보자.

 

우선 LightToggle을 만들었던걸 복사하고, 폭발 위치를 정의해야 함으로, 폭발위치를 지정할 엑터를 정의한다.

 

폭발이펙트는 언리얼 에셋에 있는 이펙트중 아무거나 사용해도 된다.

위와같은 이펙트를 사용할 것 이다.


Explosion

폭발은 아무것도 넣지 않아도 된다.

 

이벤트 그래프만 수정할 것 이다.

Explosion 커스텀 이벤트를 정의하고, 해당 이벤트가 실행되었을 때 에는 SpawnEmiter at Location을 실행하여, 폭발 이팩트를 실행시킨다.


폭발 트리거

 

LightTrigger를 복사해서 폭발 처리이펙트를 실행할 스위치로 사용할 것 이다.

 

우선, GetAll Actors With Tag를 통해, 모든 엑터를 순환하되, Tag가 explosion인 객체만 OutActors형의 벡터로 반환한다.

 

현재 우리는 0번째 객체만 다룸으로, 0번째 객체를 받아온 다음, 해당 객체를 BP_Explosion으로 형변환 한다.

그리고 변수로 받아오면 된다.

 

그리고, Explosion에 들어있던 커스텀 이벤트를, Actor BeginOverlap이벤트가 실행되었을 때, 호출하면 된다.


충돌 물리력 부여하기

 

폭발에 충돌 물리력을 구현할 것 이다.

Explosion 객체로 이동하여 이벤트 그래프로 가보자.

이미 폭발을 정의 하였음으로, 폭발 위치를 기준으로 300범위만큼의 구체를 생성하여, 그 구체와 충돌한 객체들을 OutHits로 반환한다.

OutHits는 배열형태 임으로  For를 통해 전방위순환을 한다.

 

가져온 Hit 객체들을 break하여 HitComponent로 분리하고 해당 객체의 meshComponent로 변환한다.

 

그리고 그 객체에 AddRadiusImpulse로 충격물리량을 부여하면 된다.

 

GetActorLocation의 위치 부터 반경 300기준으로 GetMass를 통해 받아온 Actor의 중량을 가져온 다음 중량값에 대해 1000만큼 곱한값을 충격힘으로 원을 기준으로 바깥쪽을 향해 힘을 부여한다.


테스트

 

728x90