본문 바로가기

Unity/Unity 기타

Unity3D- FieldOfView 시야구현(1)

1.메인카메라

 - 메인카메라의 x축을 90도로 틀어주고 적당한 높이에서 아래를 수직으로 바라보도록 한다

 - Projection을 Orthographic으로 주어 카메라가 비추는 방향을 사다리꼴모양이 아닌 직사각형 모양으로 비추도록 한다

 

2. 방해물과 타겟

 - 방해물과 적이 될 타겟 오브젝트를 여러개 만들어 관리하기 쉽게 해주고

 - 각각 Layer를 Obstacles와 Targets로 설정한다 

 

3. 플레이어

 - 컴포넌트로 리지드 바디를 추가해주고 회전을 프리징해준다 Freezing Rotation x,y,z, 체크

 - 플레이어를 움직일 Player 스크립트, 플레이어의 시야를 나타내줄 FieldOfView 스크립트를 드래그 앤 드랍한다

 

3-1. 플레이어 이동

 -Player 스크립트에서 플레이어가 키보드 상하좌우키로 움직이고 마우스커서의 방향을 바라보도록 코드를 구현한다

* viewCamera.ScreenToWorldPoint()로 Input.mousePosition을 월드좌표로 바꾸는 스킬

* rigid.MovePosition(현재위치 + 움직여줄위치 * 델타타임)으로 움직임 구현하는 스킬

 

3-2. 플레이어 시야각 구현

 - FieldOfView 스크립트

 

- FieldOfViewEditor 스크립트

*Asset 폴더에 따로 Editor 폴더를 만들어서 FieldOfViewEditor라는 C#스크립트를 생성하여 씬뷰에서 시각적으로 확인할 수 있도록 커스텀에디터 활용

*OnEnable()은 하이라키창에서 FieldOfView스크립트를 가진 플레이어 오브젝트를 클릭했을때 활성화되는것

*void OnSceneGUI()는 커스텀에디터에서 기지모를 구현할때 쓰이는 함수이다 커스텀에디터를 쓰지 않는 경우 일반

스크립트에서는 void OnDrawGizmo() 함수를 통해 구현한다 둘다 같은 Handles구조를 사용하는 같은 함수이다

 

 

 

 

3-3 플레이어의 타겟 포착 구현

 

 - FieldOfView 스크립트

 

 

 - FieldOfViewEditor 스크립트

 

 

 

참조 : www.youtube.com/watch?v=rQG9aUWarwE