본문 바로가기

유니티/모바일 멀티플레이 Shooting Game

유니티 3D 모바일 TPS 조준점(크로스헤어) 만들기

반응형

이번 포스팅에서는 fps,tps게임에 필수적인 조준점을 만드는 포스팅이다.

카메라의 정중앙에 크로스헤어가 생기게 만들 예정이다. 처음엔 그냥 메인캔버스에 정중앙에 크로스헤어 박으면 되지 않나??? 라고 생각했다.

 하지만 내가 듣는 강의에선 거리가 멀면 크로스헤어가 작아지고 거리가 가까우면 크로스헤어가 커지게 만들었다. 그렇기에 살짝 복잡하게 만들게 되었다.

 

 

우선 위와 같이 CrossHairCanvas라는 캔버를 만들고 아래에 CrossHair라는 이미지를 붙여준다. CrossHair 이미지는 원하는거 아무거나 사용가능하다.

 

그리고 CrossHairCanvas의 RenderMode를 Wolrd Space로 바꿔준다.

추후 드래그 앤 드롭으로 CrossHairCanvas를 프리펩화 시켜준다

.

캔버스를 자식까지포함해서 모두 CrossHair Layer로 바꿔준다(이름은 본인 자유)

 

 

캔버스의 Scale은 매우 작게 해주자.

 

여기까지하면 크로스헤어로 사용할 프리펩의 설정은 모두 끝났다.

이제 Player 스크립트를 수정해주자.

 

 

MyPlayer.cs에 해당 프리펩을 참조해주자

프리펩 참조

 

 

이제 크로스헤어를 메인카메라의 정중앙에서 레이저를 쏘고, 가장 먼저 맞은 물체에 프리펩을 위치하게 해서 가까우면 크로스 헤어가 커지게, 멀면 크로스헤어가 작아지게 해주겠다. MyPlayer.cs 안에 void PositionCrossHair()함수를 작성하자.

참고로 LayerMask.GetMask("Default")는 광선이 플레이어도 감지할 수 도 있으므로 Player의 Layer를 다른걸로 바꿔서 그런 사태를 방지하고자 사용했다. 

Player의 Layer를 Default가 아니라 Ignore Raycast로

 

위 함수는 계속 실행되어야 되기 때문에 LateUpdate에서 계속 함수를 실행해준다.

 

실행영상:

 

위 영상을 보면 크로스헤어가 계속 물체에 가려진다. 맞은 광선의 위치에 크로스헤어를 위치시키는데 무조건 카메라를 바라보게 하다보니 이런 현상이 나타난다. 이를 해결하기 위해 크로스헤어만 비추는 카메라를 생성해주자.

  

메인카메라의 자식에 생성한다.

Main 카메라는 CrossHair를 빼고 보여주는 카메라로 설정해주자.

 

 

CrossHairCamera

크로스헤어 카메라는 Culling Mask에 CrossHair만 체크해준다. 또한 Clear Flags는 Depth onlyDepth는 메인카메라 보다 큰 수로 설정해준다.

 

 

 

최종 실행영상

 

p.s 처음엔 복잡하게 만든게 큰 뜻이 있는줄 알았는데 별 생각없이 이렇게 만든거고, 다른 분이 "그냥 메인캔버스 정중앙에 크로스헤어 박으면 되지않아??" 라고 물어보니 " 오 좋은생각이다, 그렇게 해도 돼. 난 나중에 그걸 깨달았어" 이렇게 대답했다 ㅋㅋㅋㅋㅋ 

반응형