게임엔진(2) 2주차

  1. 레이캐스트

레이캐스트 적용 Projectile 방식과는 달리 @눈에 보이지 않는 광선(Ray)을@ 쏘아서 해당 광선에 맞은 물체가 적인지 여부를 판단한 뒤 여러가지 후처리를 하는 방식 @실제 총알이 날아가는 모습을 보이지 않음@ 기타, 감지 센서 역할, 클릭 후 회전 및 이동 처리 예를 들어, 디아블로나 리니지 같은 전통적인 쿼터뷰(Quarter View)방식의 게임에서는 플레이어를 마우스 왼쪽 클릭으로 조작해 이동시킬 때 실제로는 마우스 포인트 위치로 레이캐스트 해서 3차원 좌표 값을 읽어온 후 해당 좌표로 이동 시킨다. 시작점에서 종료지점까지 광원을 쏜다.(레이저) 레이와 콜라이더는 친하다. 친하게 써야한다. 콜라이더를 이용해서 사용하는것이 제일 빠르고 좋다. 콜라이더는 하나만 쓰기도하지만 여러개를 사용할수있다. Ex) 사람 머리, 팔, 가슴, 몸통, 다리 등등 콜라이더

레이트레이싱 빛에대한 것 직접광원과 간접광원이 있다. 그걸 계산해서 물체의 색 값을 정한다.

  1. Anbineant Light
  2. Diffuse Light
  3. Spot Light 순서대로 계산

DrawRay 레이 캐스트는 씬 뷰에서 시각적으로 표시되지 않기 때문에 개발 할 때는 DrayRay 함수를 이용해 시각적으로 표시하고 개발 해야 한다. (녹색 광선) 레이캐스트가 어떤 객체를 감지하기 위해서는 콜라이더가 컴포넌트가 있어야 함

RayCast / RaycastHit Ray를 쏘아서 어떤 게임 오브젝트에 맞았을 때 맞은 게임 오브젝트의 정보를 반환 받을 변수 RaycastHit 타입으로 선언 해야 함

관련 함수 : Physics.Raycast() @총 16가지의 사용법이 존재 @발사 원점 / 발사 방향 / out 결과 값 / 광선 거리 / 검출할 레이어@ @객체에 닿으면 true 값을 반환@ Physics.Raycast( // 어떤 Collider와 충돌 했으면 true를 반환 firePos.position, // Ray의 Start Point firePos.forward, // Ray의 방향 out hit, // 충돌한 객체에 대한 자세한 정보 리턴 10.0f ); // Max Distance

RaycastHit 구조체 collider - 맞은 게임오브젝트의 Collider 반환 transform - 맞은 게임오브젝트의 Transform 반환 point - 맞은 위치의 월드 좌푯 값 반환 (Vector3) distance - 발사위치와 맞은 위치 사이의 거리 normal - Ray가 맞은 표면의 법선 벡터 (방향정보)

길찾기 알고리즘을 활용한 주인공 캐릭터를 추적하는 로직을 구현 @동적 장애물 처리에 대해 배운다.@ 드럼통을 폭파한 뒤에도 드럼통이 없어지고 난뒤의 지역을 장애물로 인식 문제 -> 동적 장애물을 활용 끊어진 메시를 연결하는 @Off Mesh Link@ 기능에 대해 알아본다.

드럼통을 폭파 시킨 후 여전히 장애물로 인식하는 문제 해결 지금까지 제작했던 게임에서 드럼통을 장애물로 설정 해 적 캐릭터가 이 장애물을 회피하면서 주인공을 추적하게 했다. 하지만 드럼통을 폭파시킨 이후에도 여전히 적 캐릭터는 그 지점을 장애물로 인식하는 문제점이 있다. 이는 드럼통이 폭파한 후에도 미리 베이크 했던 네비메시에서 여전히 그 지점은 지나갈 수 없는 영역이기 때문이다. 이와 같은 문제는 동적으로 변경되는 장애물에 NavMeshObstacle 컴포넌트를 활용하면 해결할 수 있다.

Barrel 프리팹을 선택한 후 Navigation Static 옵션 제거 (하위객체까지 모두 변환 체크 -> Yes 체크)