Raycast는 광선 경로에
충돌체가 있는지 감지하기 위해
특정 방향의 점에서 보이지 않는
광선을 발사하는 과정입니다
총을 쏘는 것이 한 예입니다
이 인스턴스에서는
캐릭터는 자신을 배신하고 아버지를 죽인
악마의 상자를 쏴버리고 싶어 합니다
raycast 함수 문법은 이렇습니다
처음에는 혼동될 수 있지만
각 부분을 이해하면
구성에 수긍하실 겁니다
처음으로 광선의 시작은
세계 공간의 점입니다
그러므로 이 인스턴스에서
Vector3, X, Y 및 Z축 위치에 저장된
총신 앞의 점을 선택했습니다
그러나 세계 좌표 방향이 발사하려는
방향을 향하고 있지 않아
방향이 저장되어 있는 두 번째 Vector3가
필요합니다
이 두 Vector3 변수는 광선을 구성합니다
하지만 Ray 변수로 대체할 수도 있으며
해당 변수의 데이터 유형은
두 Vector3에 저장할 수 있습니다
코드는 이런 모양이 될 것입니다
함수의 다음 인수는
충돌체 충돌의 정보를 저장하는
RaycastHit 변수입니다
어떤 오브젝트가 광선을 교차하는지
코드에서 쿼리할 수 있습니다
마지막으로 선택적 인수 두 개입니다
거리는 광선 길이를
정의하며 생략하면 기본값인
무한 길이가 됩니다
다음은 레이어 마스크이며
Unity의 레이어 시스템에 있는 특정 레이어 수이며
광선이 무시하는 오브젝트를
배치할 수 있습니다
Raycast를 사용한 다른 예를
살펴봅시다
이 예제는 바닥에 가까이 갈 때
낙하산이 펴지는 낙하산 상자가
나옵니다
상자에는 부품이 2개 있습니다
슈트와 상자 자체가 그것입니다
슈트에는 슈트를 여는 것과
닫는 것, 이렇게 두 개의
애니메이션이 있습니다
이 예제에서는 상자가 바닥에 얼마나
떨어져 있는지 확인하기 위해 광선을
아래쪽으로 쏠 것이며
환경에 적용된 충돌체를 찾아 바닥을 확인할 것입니다
환경용 충돌체는 environment라는 단어로
태깅되어 있습니다
스크립트에서 해당 태그를 찾아보겠습니다
RayCast 함수가 IF문 안에 있어
아무 것이나 교차했다는 뜻인
true를 반환하면
IF문의 주석이 실행되고
RayCastHit 변수가 충돌한
것을 쿼리합니다
Physics.Raycast를 작성한
IF문에 상자 위치와 아래쪽 방향을 저장하는
landingRay 변수가 있습니다
Vector3.down 바로 가기를
광선을 쏘는 데
사용할 것입니다
RaycastHit 변수 'hit'는
아래쪽으로 쏠 때 광선과 충돌하는
모든 것을 저장하고 거리,
'length' 또는 광선은
'deployment height' 변수로 정의합니다
광선이 충돌체와 교차하면
deploy parachute 함수를 호출합니다
이 함수는 Boolean 'deployed' 플래그를
true로 설정해 반복할 수 없게 합니다
그리고 rigidbody의 Drag를
'parachuteEffectiveness' 변수로 설정합니다
이렇게 해서 낙하산이 펴지면
상자가 느리게 내려갑니다
또한 공용 변수에 할당하는
게임 오브젝트인 낙하산
오브젝트에서 애니메이션을
재생합니다
separate OnCollisionEnter 함수는
접는 애니메이션을 재생합니다
상자가 땅에 내려오거나 다른 오브젝트와
충돌하면 낙하산이 접힙니다
deployment height를 4로 설정해
광선 길이를 4로 정합니다
그리고 parachute effectiveness를 8로 설정해
rigidbody 끌기를 8로 정합니다
이제 낙하산 슈트 오브젝트를
parachute 변수로 끕니다
오브젝트에는 재생할 애니메이션 컴포넌트가
있어 펴는 것과 접는
애니메이션이 됩니다
이제 한 번 더 재생해 봅시다
씬 뷰나 게임에서는
광선 투시를 볼 수 있는
것에 주의하십시오
또한 Debug.DrawRay 함수를
사용하여 광선이
비춰지는 부분을 미리 볼 수 있습니다
Debug.DrawRay를
추가하여 Vector3.down 방향에서
상자 위치에 대한 광선을
시각적으로 그리고
기존 광선 길이인 deployment height를 곱합니다
이렇게 하여 아래 IF문에서 쏘는
실제 광선을 일치시킵니다
다시 재생하면 Unity는 씬 뷰에서
그려진 광선을
표시하여 광선을 보여줍니다