1 00:00:00,000 --> 00:00:02,100 Raycast는 광선 경로에 2 00:00:02,100 --> 00:00:04,280 충돌체가 있는지 감지하기 위해 3 00:00:04,280 --> 00:00:06,770 특정 방향의 점에서 보이지 않는 4 00:00:06,770 --> 00:00:08,770 광선을 발사하는 과정입니다 5 00:00:08,770 --> 00:00:10,770 총을 쏘는 것이 한 예입니다 6 00:00:10,770 --> 00:00:12,870 이 인스턴스에서는 7 00:00:12,870 --> 00:00:14,870 캐릭터는 자신을 배신하고 아버지를 죽인 8 00:00:14,870 --> 00:00:16,870 악마의 상자를 쏴버리고 싶어 합니다 9 00:00:17,370 --> 00:00:20,100 raycast 함수 문법은 이렇습니다 10 00:00:20,100 --> 00:00:22,100 처음에는 혼동될 수 있지만 11 00:00:22,100 --> 00:00:24,530 각 부분을 이해하면 12 00:00:24,530 --> 00:00:26,200 구성에 수긍하실 겁니다 13 00:00:26,200 --> 00:00:28,200 처음으로 광선의 시작은 14 00:00:28,200 --> 00:00:30,200 세계 공간의 점입니다 15 00:00:30,200 --> 00:00:32,200 그러므로 이 인스턴스에서 16 00:00:32,200 --> 00:00:34,200 Vector3, X, Y 및 Z축 위치에 저장된 17 00:00:34,200 --> 00:00:37,580 총신 앞의 점을 선택했습니다 18 00:00:37,920 --> 00:00:39,920 그러나 세계 좌표 방향이 발사하려는 19 00:00:39,920 --> 00:00:41,930 방향을 향하고 있지 않아 20 00:00:41,930 --> 00:00:44,420 방향이 저장되어 있는 두 번째 Vector3가 21 00:00:44,420 --> 00:00:46,210 필요합니다 22 00:00:46,210 --> 00:00:48,210 이 두 Vector3 변수는 광선을 구성합니다 23 00:00:48,210 --> 00:00:51,160 하지만 Ray 변수로 대체할 수도 있으며 24 00:00:51,160 --> 00:00:53,690 해당 변수의 데이터 유형은 25 00:00:53,690 --> 00:00:55,690 두 Vector3에 저장할 수 있습니다 26 00:00:55,690 --> 00:00:57,690 코드는 이런 모양이 될 것입니다 27 00:01:02,380 --> 00:01:04,200 함수의 다음 인수는 28 00:01:04,200 --> 00:01:06,200 충돌체 충돌의 정보를 저장하는 29 00:01:06,200 --> 00:01:08,140 RaycastHit 변수입니다 30 00:01:08,450 --> 00:01:10,450 어떤 오브젝트가 광선을 교차하는지 31 00:01:10,450 --> 00:01:12,850 코드에서 쿼리할 수 있습니다 32 00:01:13,150 --> 00:01:15,610 마지막으로 선택적 인수 두 개입니다 33 00:01:15,610 --> 00:01:17,610 거리는 광선 길이를 34 00:01:17,610 --> 00:01:19,610 정의하며 생략하면 기본값인 35 00:01:19,610 --> 00:01:21,610 무한 길이가 됩니다 36 00:01:21,610 --> 00:01:23,610 다음은 레이어 마스크이며 37 00:01:23,610 --> 00:01:26,550 Unity의 레이어 시스템에 있는 특정 레이어 수이며 38 00:01:26,550 --> 00:01:28,550 광선이 무시하는 오브젝트를 39 00:01:28,550 --> 00:01:30,220 배치할 수 있습니다 40 00:01:30,220 --> 00:01:32,220 Raycast를 사용한 다른 예를 41 00:01:32,220 --> 00:01:33,510 살펴봅시다 42 00:01:33,510 --> 00:01:35,890 이 예제는 바닥에 가까이 갈 때 43 00:01:35,890 --> 00:01:37,360 낙하산이 펴지는 낙하산 상자가 44 00:01:37,360 --> 00:01:39,200 나옵니다 45 00:01:40,460 --> 00:01:42,260 상자에는 부품이 2개 있습니다 46 00:01:42,260 --> 00:01:44,030 슈트와 상자 자체가 그것입니다 47 00:01:44,030 --> 00:01:46,030 슈트에는 슈트를 여는 것과 48 00:01:46,530 --> 00:01:48,040 닫는 것, 이렇게 두 개의 49 00:01:48,600 --> 00:01:50,030 애니메이션이 있습니다 50 00:01:50,920 --> 00:01:52,920 이 예제에서는 상자가 바닥에 얼마나 51 00:01:52,920 --> 00:01:55,330 떨어져 있는지 확인하기 위해 광선을 52 00:01:55,330 --> 00:01:57,330 아래쪽으로 쏠 것이며 53 00:01:57,330 --> 00:02:00,120 환경에 적용된 충돌체를 찾아 바닥을 확인할 것입니다 54 00:02:00,620 --> 00:02:03,150 환경용 충돌체는 environment라는 단어로 55 00:02:03,150 --> 00:02:04,690 태깅되어 있습니다 56 00:02:05,400 --> 00:02:09,200 스크립트에서 해당 태그를 찾아보겠습니다 57 00:02:10,880 --> 00:02:12,480 RayCast 함수가 IF문 안에 있어 58 00:02:12,480 --> 00:02:15,660 아무 것이나 교차했다는 뜻인 59 00:02:15,660 --> 00:02:17,660 true를 반환하면 60 00:02:17,660 --> 00:02:19,660 IF문의 주석이 실행되고 61 00:02:19,660 --> 00:02:21,660 RayCastHit 변수가 충돌한 62 00:02:21,660 --> 00:02:25,240 것을 쿼리합니다 63 00:02:26,240 --> 00:02:29,180 Physics.Raycast를 작성한 64 00:02:29,180 --> 00:02:32,860 IF문에 상자 위치와 아래쪽 방향을 저장하는 65 00:02:32,860 --> 00:02:35,710 landingRay 변수가 있습니다 66 00:02:35,710 --> 00:02:37,710 Vector3.down 바로 가기를 67 00:02:37,710 --> 00:02:39,710 광선을 쏘는 데 68 00:02:39,710 --> 00:02:41,960 사용할 것입니다 69 00:02:41,960 --> 00:02:44,370 RaycastHit 변수 'hit'는 70 00:02:44,370 --> 00:02:46,370 아래쪽으로 쏠 때 광선과 충돌하는 71 00:02:46,370 --> 00:02:48,370 모든 것을 저장하고 거리, 72 00:02:48,370 --> 00:02:50,370 'length' 또는 광선은 73 00:02:50,370 --> 00:02:53,410 'deployment height' 변수로 정의합니다 74 00:02:53,410 --> 00:02:55,860 광선이 충돌체와 교차하면 75 00:02:58,860 --> 00:03:01,800 deploy parachute 함수를 호출합니다 76 00:03:02,300 --> 00:03:04,760 이 함수는 Boolean 'deployed' 플래그를 77 00:03:04,760 --> 00:03:08,190 true로 설정해 반복할 수 없게 합니다 78 00:03:08,690 --> 00:03:11,020 그리고 rigidbody의 Drag를 79 00:03:11,020 --> 00:03:13,900 'parachuteEffectiveness' 변수로 설정합니다 80 00:03:13,900 --> 00:03:15,900 이렇게 해서 낙하산이 펴지면 81 00:03:15,900 --> 00:03:17,580 상자가 느리게 내려갑니다 82 00:03:17,580 --> 00:03:19,580 또한 공용 변수에 할당하는 83 00:03:19,580 --> 00:03:21,580 게임 오브젝트인 낙하산 84 00:03:21,580 --> 00:03:23,580 오브젝트에서 애니메이션을 85 00:03:23,580 --> 00:03:25,160 재생합니다 86 00:03:25,360 --> 00:03:27,940 separate OnCollisionEnter 함수는 87 00:03:27,940 --> 00:03:29,940 접는 애니메이션을 재생합니다 88 00:03:29,940 --> 00:03:31,940 상자가 땅에 내려오거나 다른 오브젝트와 89 00:03:31,940 --> 00:03:34,720 충돌하면 낙하산이 접힙니다 90 00:03:36,440 --> 00:03:39,570 deployment height를 4로 설정해 91 00:03:39,570 --> 00:03:41,810 광선 길이를 4로 정합니다 92 00:03:42,030 --> 00:03:45,420 그리고 parachute effectiveness를 8로 설정해 93 00:03:45,670 --> 00:03:48,620 rigidbody 끌기를 8로 정합니다 94 00:03:48,620 --> 00:03:50,620 이제 낙하산 슈트 오브젝트를 95 00:03:50,620 --> 00:03:54,270 parachute 변수로 끕니다 96 00:03:54,270 --> 00:03:57,120 오브젝트에는 재생할 애니메이션 컴포넌트가 97 00:03:57,120 --> 00:03:59,120 있어 펴는 것과 접는 98 00:03:59,120 --> 00:04:01,120 애니메이션이 됩니다 99 00:04:01,120 --> 00:04:03,120 이제 한 번 더 재생해 봅시다 100 00:04:06,680 --> 00:04:08,680 씬 뷰나 게임에서는 101 00:04:08,680 --> 00:04:10,680 광선 투시를 볼 수 있는 102 00:04:10,680 --> 00:04:13,090 것에 주의하십시오 103 00:04:13,090 --> 00:04:15,490 또한 Debug.DrawRay 함수를 104 00:04:15,490 --> 00:04:18,010 사용하여 광선이 105 00:04:18,010 --> 00:04:21,050 비춰지는 부분을 미리 볼 수 있습니다 106 00:04:21,050 --> 00:04:23,500 Debug.DrawRay를 107 00:04:23,500 --> 00:04:25,500 추가하여 Vector3.down 방향에서 108 00:04:25,500 --> 00:04:27,500 상자 위치에 대한 광선을 109 00:04:27,500 --> 00:04:30,080 시각적으로 그리고 110 00:04:30,080 --> 00:04:33,730 기존 광선 길이인 deployment height를 곱합니다 111 00:04:33,730 --> 00:04:35,730 이렇게 하여 아래 IF문에서 쏘는 112 00:04:35,730 --> 00:04:38,240 실제 광선을 일치시킵니다 113 00:04:38,550 --> 00:04:40,550 다시 재생하면 Unity는 씬 뷰에서 114 00:04:40,550 --> 00:04:42,550 그려진 광선을 115 00:04:42,550 --> 00:04:45,890 표시하여 광선을 보여줍니다