1. 플레이어 시야각 가시화 하기
- FieldOfView 스크립트
- 총시야각을 stepCount 수로 등분하고
- 하나의 조각시야각을 stepAngleSize로 지정
- 총시야각을 stepAngleSize만큼 나누어 Ray를 그린다
*4/06 수정
1).ex) 해상도=0.1, 총시야각 =60도 --->등분수stepCount =10등분 => 등분수steopCount = 6분등 으로 수정
2).ex) 등분수=10등분 ---> 한조각 각도stepAngleSize =6도 => 등분수=6등분 ---> 한조각 각도stepAngleSize=10도
3).for(int i=0; i<stepCount; i++) => for(int i=0; i<=stepCount; i++) 로수정
2. 시야각 가시화하기(2)
- FieldOfView 스크립트
- 1에서 나누어 그려본 Ray방향으로 Ray를 직접 발사하여 장해물에 도달하면 해당 장해물에 도달한 지점을 저장,
해당 Ray가 장해물에 도달하지 않으면 본래 나아갈 길이만큼 나아간 끝부분 지점을 저장
- 위 지점들을 꼭지점으로 하고 Ray를 발사한 플레이어를 원점으로 하여 원점을 포함한 꼭지점들의 모임인 정점배열 을 만들고,
- 위 정점배열들로 만들 수 있는 삼각형의 갯수를 정의하여 삼각형을 만들기 위해 필요한 정점들의 모임인 삼각형꼭지 점 배열을 만든다
* 커스텀 메쉬를 만들기위해 정점배열과, 삼각형을 이루는데 필요한 꼭지점배열이 필요한 이유
유니티(Unity) | 메쉬(Mesh) 코드로 만들기
Unity에서는 Mesh를 만들기위한 코드를 제공하며 DX와 비슷하기 때문에 DX를 좀 하신분이라면 어렵지 않게 접근할 수 있습니다. DX를 전혀 모르시더라도 네이티브 언어로 접근하는게 아니기에 Mesh가
uemonwe.tistory.com
3. 시야각 가시화하기(3)
- 시야각 커스텀메쉬를 만들기 위해 인스펙터창에 등록할 빈 meshFilter를 선언해주고
- 이 후 할당할 meshfilter컴포넌트의 mesh에 우리가 만들 customViewMesh 메쉬를 채워 넣어준다
- Player의 자식오브젝트로 빈오브젝트를 생성하고 View Visualation으로 Rename한다
- 여기에 우리가 만들 커스텀메쉬가 들어가 mesh실체를 형성하기 위해 필요한 MeshFilter컴포넌트를 만들어준다
(현재 None이라고된 Mesh속성에 커스텀메쉬가 들어가 실체를 형성할 예정)
- MeshRenderer컴포넌트도 만들어준다 이는 실체화한 Mesh에 Material을 렌더링하기 위한 컴포넌트이며
해당Mesh가 그림자를 그리지 않도록 Cast Shadows를 off해주고,
다른 물체의 그림자가 Mesh에 그려지지 않도록 Receive Shadows를 체크해제 해준다
- 2에서 만든 정점배열과 삼각형꼭지점배열을 커스텀메쉬를 만들기위해 필요한 mesh.vertices배열과 mesh.triangles배열에 대입해주어 커스텀 메쉬를 완성시킨다
- mesh.Clear()와, mesh.RecalculateNomals()를 활용하여 시야각 해상도에따라 바뀌는 정점 정보(mesh.vertice)에 대해 삼각형정점배열 정보(mesh.triangles)를 재설정하는데 용이하도록 구현해준다
*mesh.vertices is too small...에러를 mesh.Clear()로 해결
- 정점배열의 첫번째 원소이자 원점인 vertexs[0]의 위치가 로컬포지션인것과 같은 이유로 나머지 정점들인
vertexs[i+1]원소들의 위치도 로컬포지션으로 바꿔주기 위해 transform.InverseTransformPoint()를 활용하여
지역좌표계 기준으로 바꿔준다
4. 시야각 가시화하기(4)
- 이제 유니티 에디터에서 Player가 시야를 얼마나 정밀하게 관찰하는지에 대한 해상도(높을 수록 총 시야각을 많은
조각으로 나눔)인 Mesh Resolution을 설정해주고
*Mesh Resolution을 0으로 두고 Play를 누르면 overFlow exception 에러가 난다
- Player의 MeshFilter인스펙터에 우리가 3에서 만든 View Visualation오브젝트를 드래그 앤 드랍한다
- Play를 누르면 우리가 원하는 시야각 가시화에 근접하게 도달한다
- Play를 하니 View Visualation의 Mesh Filter에 우리가 만들고 View Mesh로 이름을 설정한 시야각 커스텀 메쉬가 들어간 것을 볼 수 있다.
- Mesh Renderer컴포넌트를 만든 이유 => Material을 하나 생성하여 상단의 Rendering Mode를 fade모드로 바꿔주고
흰색의 투명한 재질을 우리의 시야각 커스텀메쉬에 드래그 앤 드랍하여 입혀준다
*참고 Rendering Mode : docs.unity3d.com/kr/530/Manual/StandardShaderMaterialParameterRenderingMode.html
'Unity > Unity 기타' 카테고리의 다른 글
Unity3D- FieldOfView 시야구현(최종) (0) | 2021.04.06 |
---|---|
Unity3D- fieldOfView 시야구현(3) (0) | 2021.04.06 |
Unity3D- DrawRay와 DrawLine 차이점 (0) | 2021.04.04 |
Unity3D- FieldOfView 시야구현(1) (0) | 2021.04.04 |
Unity - 임의의 원 범위안에서 스폰, 커스텀에디터, 부채꼴 충돌, 유용한 Mathf 함수 (0) | 2021.04.04 |