언리얼엔진 공부 복습용 -9- 충돌(3)

2023. 1. 16. 12:10언리얼 엔진

회사일도 빠쁘고 기존컴퓨터를 윈도우 재설치 하다보니 기존 작업물들이 모두 사라져서 의욕이 사라졌지만 조금이라도 꾸준히 해보려합니다.

 

지난시간에 선까지 긋는것까지 했는데 이제는 선과 충돌하면 플레이어의 색이 바뀌게 해보겠다.

급하게 새로 만들었다.

우선 선과 캐릭터가 충돌이 되는지부터 확인해봐야한다.

충돌은 콜리전과 콜리전으로 부딫히는것인데 선이라고 되어있는것은 살짝 콜리전을 두기가 애매하다.

그래서 언리얼 자체에서 제공해주는 Line 콜리전이있다.

다양한 라인트레이스 콜리전들이 있으며 우리는 3번째 LineTrace For Objects를 선택한다.

멀티는 여러가지 충돌을 반환하며 기본은 하나의 충돌만 반환한다.

다른것들에 간략하게 설명하자면 채널은 카메라에서 볼때 충돌처리를 할때 자주 사용되며(보이지않는 물체 카메라 등?)

프로필은 거이 안쓰는것같다. (자세한건 구글검색으로..ㅎㅎ)

Start 노드와 End 노드에 기존 선그릴때의 시작점과 끝지점을 지정해준다.

그리고 이제 충돌체의 오브젝트 타입을 정해야하는데.

어떠한 오브젝트 배열이 들어가는지 한번살펴보면 충돌처리될 항목들이보인다.

이는 우리가 디테일패널에서 본 콜리전 프리셋에 충돌처리되는 항목들이며 

우리는 플레이어를 충돌시키려고 하기 때문에 Pawn을 선택해 주면 된다.

그리고 무시할 액터에는 우리가 변수로 만들어 넣어둔 실린더를 그대로 넣는다.

이걸 넣는 이유는 애초에 선이 실린더 가운데에서 부터 시작되는데. 예외처리하지않으면 그 실린더와도 충돌처리 되기 때문이다.

그리고 Draw Debug Type은 원프레임으로 만들고 컴파일한다. 

게임에서 확인해보자.

선이 빨간색으로 바뀌었다. 이후 캐릭터로 들어가보면

캐릭터와 선이 닿는 부분이 빨간색 네모가 그려지고 그이후는 초록색으로 바뀌었다.

아까 그 라인트레이스 콜리전을 다시보면 해당 부분을 통해 저 히트된곳에 색상을 맘대로 바꿀 수 있고 보이다싶이 히트된 이후엔 초록색이된다.

키보드 1 왼쪽에 `를 누르면 나오는 콘솔창

콘솔창에 show collision이라고 치고 한번다시보면 완벽하게 캐릭터의 콜리전에 충돌했을때 변하는것을 볼수 있다.

아마 좌측부터 Line이쏴져서 좌측에 빨간 네모박스가 그려진것같다.

그럼이제 플레이어의 콜리전과 충돌처리가 되는것은 확인했다.

이제 플레이어의 색을 바꿔보자.

빈곳에 커스텀이벤트를 추가하고 Change Color라고 하자.

그러면 이제 Line Trace 이후에 Change Color를 실행시킨다고 넣어주면 보기도 좋고 관리도 좋을것이다.

우선 Change Color 이벤트를 진행하기전 충돌된 정보를 갖고와야한다.

Hit 결과를 받아올 노드를 Change Color 이벤트에 추가시켜준다

Change Color 이벤트를 누르고 오른쪽에 입력부분에 새로운 노드를 추가시켜준다. 이름과 타입은 Hit Result로

그럼 이렇게 잘 맞는다. 해당부분을 연결시켜주자.

이후 다시 Change Color 이벤트로오면 해당 노드를 Break 함수 또는 핀분할로 열어보면 수많은 정보가 담겨있는 Hit Result 타입이란것을 알 수 있는데 우리는 그 중에서도 Hit Actor가 필요하다. 왜냐하면 맞은 액터가 결국 우리 플레이어 이니깐 우선간단하게 확인해보자.

만약 Hit 상태라면 (충돌상태라면) 충돌된 액터의 이름을 출력해주는 함수를 간단한게 만들었다.

잘나오는것 같다.

그럼이제 플레이어색을 바꾸면되는데 플레이어는 캐릭터고 캐릭터는 메시와 스켈레탈 그리고 머티리얼로 이루어져있는데 머티리얼이 색을 담당하는부분 겉옷이라고 생각하면된다. 우선 해당 머티리얼을 직접적으로 바꾸면 해당 머티리얼을 사용하는 모든 액터들도 색이바뀔것이기때문에 그 머티리얼을 본뜬 녀석을 하나 만들어줘야한다 우리는 그걸 인스턴스라 부른다. 상속이랑 똑같은개념이다 부모와 똑같이 생겨서 간단하게 수정할 수 있는

해당 캐릭터 메시에 선택된 머티리얼의 위치를 찾아서 머티리얼 인스턴스를 생성해주자.

좌(원본) 우(인스턴스)

머티리얼 인스턴스는 하나의 간소화버전이며 원본을 건드리면 시간도 오래걸리고 복잡해서 인스턴스화 시켜 원하는것만 골라 수정할 수 있다. 그럼 이제 우리는 색을 바꾸기위해 플레이어 캐릭터가 장착하고 있는 머티리얼(인스턴스)을 알아내야한다.

플레이어 캐릭터를 가져오고 그 캐릭터의 메시를 가져오고 그 메시안에 머티리얼을 가져오고 머티리얼에서 다이나믹 머티리얼 인스턴스를 생성해주자. 

※다이나믹 머티리얼 인스턴스를 만드는이유는 실시간으로 바꾸기위해서이다.

그렇다면 해당 부분은 생성자에서 만들어야한다. 

BodyColor 변수를만들어 해당 다이나믹 머티리얼 인스턴스를 저장시켰다. 

변수 타입은 Material Dynamic Instance 타입

그리고 그 만든 다이나믹 머티리얼 인스턴스는 다시 플레이어캐릭터에 메시에 셋팅해준다.

이후 Set Vector Parameter Value를 통해 색을 변환할 수 있는데 

Value엔 내가 원하는 색

타깃은 아까 우리가 Body Color 변수에 저장한 다이나믹 머티리얼 인스턴스

그리고 Parameter Name엔 머티리얼 인스턴스에서 색을 조절하는 파라미터의 이름이다. 

Tint 색을 바꾸면 색이바뀐다. 

이는 머티리얼마다 만든사람이 설정해놓은 이름이기때문에 늘 확인해줘야한다. 

아무튼 한번 컴파일하고 확인해보자.

내가 설정한대로 잘 바뀐것을 볼 수 있다. 

여기서 더나아가자면 지금은 틱상황이기때문에 랜덤으로 조절할 수도있는데

이렇게 LinearColor (값들을 0~1로 조절한) 만들기를 만들고 알파값은 보여야하니 당연히 1

그리고 0~1이나오는 플로트 타입 숫자 랜덤값을 RGB에 입력시켜주고 그값을 파라미터 밸류에 넣어준다. 결과는?

 

정신없이 바뀌는것을 확인할 수 있다. 

충돌로 색이바뀌는것이아닌 데미지를 입는다거나 하는 등 다양하게 사용할 수 있다.