WEBVTT 00:00:00.000 --> 00:00:02.100 Raycast는 광선 경로에 00:00:02.100 --> 00:00:04.280 충돌체가 있는지 감지하기 위해 00:00:04.280 --> 00:00:06.770 특정 방향의 점에서 보이지 않는 00:00:06.770 --> 00:00:08.770 광선을 발사하는 과정입니다 00:00:08.770 --> 00:00:10.770 총을 쏘는 것이 한 예입니다 00:00:10.770 --> 00:00:12.870 이 인스턴스에서는 00:00:12.870 --> 00:00:14.870 캐릭터는 자신을 배신하고 아버지를 죽인 00:00:14.870 --> 00:00:16.870 악마의 상자를 쏴버리고 싶어 합니다 00:00:17.370 --> 00:00:20.100 raycast 함수 문법은 이렇습니다 00:00:20.100 --> 00:00:22.100 처음에는 혼동될 수 있지만 00:00:22.100 --> 00:00:24.530 각 부분을 이해하면 00:00:24.530 --> 00:00:26.200 구성에 수긍하실 겁니다 00:00:26.200 --> 00:00:28.200 처음으로 광선의 시작은 00:00:28.200 --> 00:00:30.200 세계 공간의 점입니다 00:00:30.200 --> 00:00:32.200 그러므로 이 인스턴스에서 00:00:32.200 --> 00:00:34.200 Vector3, X, Y 및 Z축 위치에 저장된 00:00:34.200 --> 00:00:37.580 총신 앞의 점을 선택했습니다 00:00:37.920 --> 00:00:39.920 그러나 세계 좌표 방향이 발사하려는 00:00:39.920 --> 00:00:41.930 방향을 향하고 있지 않아 00:00:41.930 --> 00:00:44.420 방향이 저장되어 있는 두 번째 Vector3가 00:00:44.420 --> 00:00:46.210 필요합니다 00:00:46.210 --> 00:00:48.210 이 두 Vector3 변수는 광선을 구성합니다 00:00:48.210 --> 00:00:51.160 하지만 Ray 변수로 대체할 수도 있으며 00:00:51.160 --> 00:00:53.690 해당 변수의 데이터 유형은 00:00:53.690 --> 00:00:55.690 두 Vector3에 저장할 수 있습니다 00:00:55.690 --> 00:00:57.690 코드는 이런 모양이 될 것입니다 00:01:02.380 --> 00:01:04.200 함수의 다음 인수는 00:01:04.200 --> 00:01:06.200 충돌체 충돌의 정보를 저장하는 00:01:06.200 --> 00:01:08.140 RaycastHit 변수입니다 00:01:08.450 --> 00:01:10.450 어떤 오브젝트가 광선을 교차하는지 00:01:10.450 --> 00:01:12.850 코드에서 쿼리할 수 있습니다 00:01:13.150 --> 00:01:15.610 마지막으로 선택적 인수 두 개입니다 00:01:15.610 --> 00:01:17.610 거리는 광선 길이를 00:01:17.610 --> 00:01:19.610 정의하며 생략하면 기본값인 00:01:19.610 --> 00:01:21.610 무한 길이가 됩니다 00:01:21.610 --> 00:01:23.610 다음은 레이어 마스크이며 00:01:23.610 --> 00:01:26.550 Unity의 레이어 시스템에 있는 특정 레이어 수이며 00:01:26.550 --> 00:01:28.550 광선이 무시하는 오브젝트를 00:01:28.550 --> 00:01:30.220 배치할 수 있습니다 00:01:30.220 --> 00:01:32.220 Raycast를 사용한 다른 예를 00:01:32.220 --> 00:01:33.510 살펴봅시다 00:01:33.510 --> 00:01:35.890 이 예제는 바닥에 가까이 갈 때 00:01:35.890 --> 00:01:37.360 낙하산이 펴지는 낙하산 상자가 00:01:37.360 --> 00:01:39.200 나옵니다 00:01:40.460 --> 00:01:42.260 상자에는 부품이 2개 있습니다 00:01:42.260 --> 00:01:44.030 슈트와 상자 자체가 그것입니다 00:01:44.030 --> 00:01:46.030 슈트에는 슈트를 여는 것과 00:01:46.530 --> 00:01:48.040 닫는 것, 이렇게 두 개의 00:01:48.600 --> 00:01:50.030 애니메이션이 있습니다 00:01:50.920 --> 00:01:52.920 이 예제에서는 상자가 바닥에 얼마나 00:01:52.920 --> 00:01:55.330 떨어져 있는지 확인하기 위해 광선을 00:01:55.330 --> 00:01:57.330 아래쪽으로 쏠 것이며 00:01:57.330 --> 00:02:00.120 환경에 적용된 충돌체를 찾아 바닥을 확인할 것입니다 00:02:00.620 --> 00:02:03.150 환경용 충돌체는 environment라는 단어로 00:02:03.150 --> 00:02:04.690 태깅되어 있습니다 00:02:05.400 --> 00:02:09.200 스크립트에서 해당 태그를 찾아보겠습니다 00:02:10.880 --> 00:02:12.480 RayCast 함수가 IF문 안에 있어 00:02:12.480 --> 00:02:15.660 아무 것이나 교차했다는 뜻인 00:02:15.660 --> 00:02:17.660 true를 반환하면 00:02:17.660 --> 00:02:19.660 IF문의 주석이 실행되고 00:02:19.660 --> 00:02:21.660 RayCastHit 변수가 충돌한 00:02:21.660 --> 00:02:25.240 것을 쿼리합니다 00:02:26.240 --> 00:02:29.180 Physics.Raycast를 작성한 00:02:29.180 --> 00:02:32.860 IF문에 상자 위치와 아래쪽 방향을 저장하는 00:02:32.860 --> 00:02:35.710 landingRay 변수가 있습니다 00:02:35.710 --> 00:02:37.710 Vector3.down 바로 가기를 00:02:37.710 --> 00:02:39.710 광선을 쏘는 데 00:02:39.710 --> 00:02:41.960 사용할 것입니다 00:02:41.960 --> 00:02:44.370 RaycastHit 변수 'hit'는 00:02:44.370 --> 00:02:46.370 아래쪽으로 쏠 때 광선과 충돌하는 00:02:46.370 --> 00:02:48.370 모든 것을 저장하고 거리, 00:02:48.370 --> 00:02:50.370 'length' 또는 광선은 00:02:50.370 --> 00:02:53.410 'deployment height' 변수로 정의합니다 00:02:53.410 --> 00:02:55.860 광선이 충돌체와 교차하면 00:02:58.860 --> 00:03:01.800 deploy parachute 함수를 호출합니다 00:03:02.300 --> 00:03:04.760 이 함수는 Boolean 'deployed' 플래그를 00:03:04.760 --> 00:03:08.190 true로 설정해 반복할 수 없게 합니다 00:03:08.690 --> 00:03:11.020 그리고 rigidbody의 Drag를 00:03:11.020 --> 00:03:13.900 'parachuteEffectiveness' 변수로 설정합니다 00:03:13.900 --> 00:03:15.900 이렇게 해서 낙하산이 펴지면 00:03:15.900 --> 00:03:17.580 상자가 느리게 내려갑니다 00:03:17.580 --> 00:03:19.580 또한 공용 변수에 할당하는 00:03:19.580 --> 00:03:21.580 게임 오브젝트인 낙하산 00:03:21.580 --> 00:03:23.580 오브젝트에서 애니메이션을 00:03:23.580 --> 00:03:25.160 재생합니다 00:03:25.360 --> 00:03:27.940 separate OnCollisionEnter 함수는 00:03:27.940 --> 00:03:29.940 접는 애니메이션을 재생합니다 00:03:29.940 --> 00:03:31.940 상자가 땅에 내려오거나 다른 오브젝트와 00:03:31.940 --> 00:03:34.720 충돌하면 낙하산이 접힙니다 00:03:36.440 --> 00:03:39.570 deployment height를 4로 설정해 00:03:39.570 --> 00:03:41.810 광선 길이를 4로 정합니다 00:03:42.030 --> 00:03:45.420 그리고 parachute effectiveness를 8로 설정해 00:03:45.670 --> 00:03:48.620 rigidbody 끌기를 8로 정합니다 00:03:48.620 --> 00:03:50.620 이제 낙하산 슈트 오브젝트를 00:03:50.620 --> 00:03:54.270 parachute 변수로 끕니다 00:03:54.270 --> 00:03:57.120 오브젝트에는 재생할 애니메이션 컴포넌트가 00:03:57.120 --> 00:03:59.120 있어 펴는 것과 접는 00:03:59.120 --> 00:04:01.120 애니메이션이 됩니다 00:04:01.120 --> 00:04:03.120 이제 한 번 더 재생해 봅시다 00:04:06.680 --> 00:04:08.680 씬 뷰나 게임에서는 00:04:08.680 --> 00:04:10.680 광선 투시를 볼 수 있는 00:04:10.680 --> 00:04:13.090 것에 주의하십시오 00:04:13.090 --> 00:04:15.490 또한 Debug.DrawRay 함수를 00:04:15.490 --> 00:04:18.010 사용하여 광선이 00:04:18.010 --> 00:04:21.050 비춰지는 부분을 미리 볼 수 있습니다 00:04:21.050 --> 00:04:23.500 Debug.DrawRay를 00:04:23.500 --> 00:04:25.500 추가하여 Vector3.down 방향에서 00:04:25.500 --> 00:04:27.500 상자 위치에 대한 광선을 00:04:27.500 --> 00:04:30.080 시각적으로 그리고 00:04:30.080 --> 00:04:33.730 기존 광선 길이인 deployment height를 곱합니다 00:04:33.730 --> 00:04:35.730 이렇게 하여 아래 IF문에서 쏘는 00:04:35.730 --> 00:04:38.240 실제 광선을 일치시킵니다 00:04:38.550 --> 00:04:40.550 다시 재생하면 Unity는 씬 뷰에서 00:04:40.550 --> 00:04:42.550 그려진 광선을 00:04:42.550 --> 00:04:45.890 표시하여 광선을 보여줍니다