< Return to Video

Stealth game tutorial - 204 - Player Movement - Unity Official Tutorials

  • 0:00 - 0:03
    플레이어 생성의 다음 단계는
  • 0:03 - 0:05
    동작을 제어하는 스크립트 작성입니다
  • 0:05 - 0:07
    플레이어를 선택하고 [Player Movement]라는
  • 0:07 - 0:09
    새 스크립트를 추가합니다
  • 0:13 - 0:15
    스크립트를 정리합니다
  • 0:17 - 0:19
    여느 때처럼 공개 변수부터 시작합니다
  • 0:19 - 0:22
    플레이어가 고함 소리를 저장할
  • 0:22 - 0:24
    오디오 클립이 필요합니다
  • 0:24 - 0:26
    이 변수를 [shoutingClip]이라고 하겠습니다
  • 0:26 - 0:28
    [Lerp] 함수를 이용해 플레이어의
  • 0:28 - 0:30
    방향을 변경합니다
  • 0:31 - 0:33
    따라서 부드러운 동작을
    위한 값이 필요합니다
  • 0:36 - 0:38
    플레이어 애니메이터의
    속도 매개변수를 설정할 때
  • 0:38 - 0:41
    댐핑을 적용합니다
  • 0:41 - 0:44
    댐핑 시간을 공개 부동 변수로 저장합니다
  • 0:46 - 0:48
    또한 레퍼런스를 저장할 비공개 변수 2개도
  • 0:48 - 0:51
    필요합니다
    하나는 애니메이터 컴포넌트를
  • 0:51 - 0:52
    위한 변수이며
  • 0:53 - 0:57
    다른 하나는 해시 IDs
    스크립트 레퍼런스입니다
  • 0:58 - 1:00
    이제 [Awake] 함수를 이용해
  • 1:00 - 1:02
    이 레퍼런스들을 할당할 수 있습니다
  • 1:07 - 1:09
    이와 함께 [Awake] 함수를 이용해
  • 1:09 - 1:11
    애니메이터 컨트롤러의 샤우팅
  • 1:11 - 1:13
    레이어 가중치를 설정할 것입니다
  • 1:14 - 1:16
    레이어 가중치는 레이어의 효율성이므로
  • 1:16 - 1:19
    1의 값으로 설정하면 이 레이어의
  • 1:19 - 1:21
    애니메이션은 그 아래의 기본 레이어 등과
  • 1:21 - 1:23
    같은 모든 레이어에 완전히
  • 1:23 - 1:25
    우선할 가능성이 있습니다
  • 1:25 - 1:27
    아바타 마스크를 사용하고 있고
  • 1:27 - 1:28
    대부분의 시간 동안 [Shouting] 레이어가
  • 1:28 - 1:30
    빈 상태일 것이므로, 이 레이어 가중치를
  • 1:30 - 1:32
    1로 설정해 기본 레이어 애니메이션에
  • 1:32 - 1:35
    영향을 주지 않을 수도 있습니다
  • 1:38 - 1:40
    이 함수는 2개의 독립변수를 취합니다
  • 1:40 - 1:43
    첫 번째는 정수, 즉 레이어의 지수인데
  • 1:43 - 1:45
    가령 기본 레이어는 0,
  • 1:45 - 1:47
    [Shouting] 레이어는 1입니다
  • 1:47 - 1:49
    그리고 두 번째 독립변수는 앞서
  • 1:49 - 1:52
    살펴본 대로 효율성, 즉 1의 값입니다
  • 1:52 - 1:54
    플레이어는 물리 오브젝트이므로
  • 1:54 - 1:56
    우리는 고정 업데이트 함수에서 플레이어의
  • 1:56 - 1:59
    동작을 처리할 것입니다
    지금 추가합니다
  • 2:01 - 2:03
    우선 사용자로부터 확보하는 입력을
  • 2:03 - 2:05
    캐시 하겠습니다
  • 2:05 - 2:07
    이런 식으로 입력 함수를 다시
  • 2:07 - 2:09
    호출할 필요 없이 필요할 때
  • 2:09 - 2:11
    이용할 수 있습니다
  • 2:16 - 2:18
    입력을 확보했으므로 그러한 정보를
  • 2:18 - 2:20
    이용해 동작을 관리할
    함수를 작성합니다
  • 2:20 - 2:22
    이름을 [MovementManagement]로 하는데요
  • 2:22 - 2:24
    이 함수는 방금 캐시한
  • 2:24 - 2:26
    입력 변수의 매개변수를
  • 2:26 - 2:28
    취해야 합니다
  • 2:30 - 2:32
    여기에서 할 수 있는 첫 번째 작업은
  • 2:32 - 2:35
    이 함수에서 독립변수로 취하고 있는
  • 2:35 - 2:37
    [Sneaking] 변수를 이용해
  • 2:37 - 2:39
    [Sneaking] 애니메이터를
    설정하는 것입니다
  • 2:40 - 2:42
    [Hash IDs] 스크립트 레퍼런스를 이용해
  • 2:42 - 2:44
    설정할 매개변수를 결정할 수 있습니다
  • 2:46 - 2:48
    플레이어에게 적용될 동작 방식은
  • 2:48 - 2:50
    축 입력에 따라 플레이어의 방향이
  • 2:50 - 2:53
    결정되는 방식입니다
  • 2:53 - 2:55
    플레이어는 그러한 방향에 따라
  • 2:55 - 2:58
    앞으로 달리는데요, 우수한 컨트롤
  • 2:58 - 3:00
    반응성을 위해 플레이어가
  • 3:00 - 3:02
    부드럽고 신속하게 회전을 변경할 수
  • 3:02 - 3:04
    있도록 할 것입니다
  • 3:04 - 3:06
    이를 위해 우선 방향 입력이 있는지
  • 3:06 - 3:09
    결정해야 합니다
  • 3:12 - 3:14
    플레이어가 방향 입력이 정의한 방향으로
  • 3:14 - 3:16
    회전할 수 있도록 이를 처리할
  • 3:16 - 3:18
    함수를 작성할 것입니다
  • 3:18 - 3:20
    목표 회전을 결정하려면
  • 3:20 - 3:22
    이 함수에는 수평 및 수직 변수가
  • 3:22 - 3:24
    필요합니다
  • 3:26 - 3:28
    우리가 플레이어가 향하길 원하는
  • 3:28 - 3:30
    새 방향을 벡터로 가정한다면
  • 3:30 - 3:32
    그러한 방향은
  • 3:32 - 3:35
    수평 입력의 X 방향의 양과
  • 3:35 - 3:37
    수직 입력의 Z 방향의 양으로
  • 3:37 - 3:39
    표시할 수 있습니다
  • 3:39 - 3:42
    따라서 수평과 수직이 모두 1이라면
  • 3:42 - 3:44
    즉 윗쪽과 오른쪽 방향 키를 누르고 있다면
  • 3:44 - 3:46
    플레이어는 양의 X 및 Z 방향을
  • 3:46 - 3:48
    향합니다
  • 3:48 - 3:50
    이 의도한 방향을 vector3로
  • 3:50 - 3:52
    저장하겠습니다
  • 4:01 - 4:03
    플레이어의 회전을 조정할 수 있도록
  • 4:03 - 4:05
    이제 이 벡터를 사원수로
  • 4:05 - 4:07
    변환해야 합니다
  • 4:07 - 4:10
    사원수란 회전을 저장하는 방식입니다
  • 4:10 - 4:13
    사원수은 다소 고급
    주제이지만 회전을 캐릭터에
  • 4:13 - 4:15
    다시 할당하는 데 필요합니다
  • 4:15 - 4:17
    Unity는 이런 과정을 단순화한
  • 4:17 - 4:20
    [LookRotation]이라는 내장 함수를
  • 4:20 - 4:21
    지원합니다
  • 4:21 - 4:24
    [LookRotation]은 사원수 클래스의
  • 4:24 - 4:27
    정적 함수입니다
    이것은 독립변수 2개를 취합니다
  • 4:27 - 4:29
    하나는 사원수로 변환하려는
  • 4:29 - 4:32
    방향을 나타내고
  • 4:32 - 4:34
    나머지 하나는 윗쪽 방향을 나타내는
  • 4:34 - 4:36
    벡터입니다
  • 4:37 - 4:39
    플레이어가 방향을 바꿀
    때 부드럽게 회전할 수
  • 4:39 - 4:42
    있도록 할 것입니다
    이를 위해 [Lerp]를 이용해
  • 4:42 - 4:45
    목표 회전 방향에서 현재 회전과
  • 4:45 - 4:47
    근소한 차이가 나는 새로운 회전을
  • 4:47 - 4:49
    획득할 것입니다
  • 4:51 - 4:53
    현재의 [rigidbody.rotation]을
    출발 방향으로
  • 4:53 - 4:55
    키 입력의 [targetRotation]을
  • 4:58 - 5:00
    부드럽게 나아가려는 방향으로
  • 5:00 - 5:02
    이용할 것이며, 방향 전환을
  • 5:02 - 5:06
    부드럽게 해주는 변수가 이 과정의
  • 5:06 - 5:08
    소요 시간을 제어합니다
  • 5:08 - 5:11
    그런 다음 [rigidbody.MoveRotation]을
  • 5:11 - 5:13
    이용해 rigidbody의 회전을
  • 5:13 - 5:16
    이 새 회전으로 설정합니다
  • 5:17 - 5:19
    회전 함수 작성을 마쳤으므로
  • 5:19 - 5:21
    동작 관리 함수로 되돌아가 함수를
  • 5:21 - 5:23
    호출할 수 있습니다
  • 5:25 - 5:27
    이 if 문 내에 있는 동안 입력 수신 사실을
  • 5:27 - 5:29
    알고 있으므로 플레이어가
  • 5:30 - 5:32
    움직이고 있다는 것을 파악할 수 있습니다
  • 5:32 - 5:34
    그러므로 애니메이터의 속도 매개변수를
  • 5:34 - 5:37
    설정할 수 있습니다
    블렌드 트리가 결정한
  • 5:37 - 5:40
    애니메이션 속도에 따라 속도 매개변수를
  • 5:40 - 5:43
    5.5로 설정합니다
  • 5:45 - 5:47
    설정에 따라 댐핑을 매개변수에
  • 5:47 - 5:49
    적용할 것입니다
    그러면 반응성을
  • 5:49 - 5:51
    유지하면서 전환이 부드럽게
  • 5:51 - 5:53
    이루어집니다
  • 5:55 - 5:57
    하지만 입력을 수신하지 않고 있다면
  • 5:57 - 5:59
    속도를 0으로 설정하려고 합니다
  • 6:03 - 6:05
    동작 관리 함수 작성을 완료했으므로
  • 6:05 - 6:09
    고정 업데이트 함수에서 호출할 수 있습니다
  • 6:11 - 6:13
    플레이어의 오디오
    즉, 발자국과 고함 소리를
  • 6:13 - 6:16
    아직 추가하지 않았습니다
  • 6:16 - 6:19
    이를 위해 오디오 관리
    함수를 작성하겠습니다
  • 6:20 - 6:22
    [Locomotion] 상태일 때 발자국 오디오
  • 6:22 - 6:24
    클립이 재생되도록 하면 됩니다
  • 6:25 - 6:27
    따라서 우선 플레이어가 현재
  • 6:27 - 6:29
    [Locomotion] 상태인지 확인해야 합니다
  • 6:29 - 6:31
    적절한 상태가 [HashIDs]
    스크립트에 저장되어
  • 6:31 - 6:34
    있으므로, 이름 해시를 사용할 수 있습니다
  • 6:34 - 6:37
    여기에서 0의 값으로
    [GetCurrentAnimatorStateInfo]를
  • 6:37 - 6:39
    이용해 기본 레이어의 상태를
  • 6:39 - 6:42
    참조하고 있습니다
  • 6:44 - 6:46
    또한 클립이 재생되고 있지 않은
  • 6:46 - 6:48
    경우에만 재생을 원합니다
  • 6:53 - 6:55
    하지만 [Locomotion] 상태가 아닌
  • 6:55 - 6:57
    경우에는 끝난 후 재생되게
  • 6:57 - 6:59
    할 것이므로 이 지점에서
  • 6:59 - 7:01
    멈추겠습니다
  • 7:03 - 7:05
    플레이어의 발자국 소리를
    관리하는 오디오 소스
  • 7:05 - 7:07
    컴포넌트를 이용하고 있으므로
  • 7:07 - 7:10
    샤우팅 관리를 위해
    [PlayClipAtPoint] 함수를
  • 7:10 - 7:13
    이용할 것입니다
    오디오 소스가 발자국 소리를
  • 7:13 - 7:15
    재생할 것이고, 우리는 그것을
  • 7:15 - 7:17
    발자국 소리로 대체하는 것을
    원하지 않기 때문입니다
  • 7:17 - 7:20
    샤우팅 클립의 재생 조건은
  • 7:20 - 7:23
    [Shout]가 [True]인 경우입니다
  • 7:23 - 7:25
    [PlayClipAtPoint]는 독립변수 2개
  • 7:25 - 7:28
    즉, 오디오 클립과 위치를
    위한 vector3를 취합니다
  • 7:29 - 7:31
    이것은 특정 위치의 세계에서
  • 7:31 - 7:33
    새 오브젝트를 생성하고 그곳에서
  • 7:33 - 7:35
    사운드를 재생합니다
    그런 다음 이 오브젝트는
  • 7:35 - 7:38
    장면에서 더 이상 남지 않도록 소멸합니다
  • 7:40 - 7:42
    이제 오디오 관리 함수가 완성되었습니다
  • 7:43 - 7:45
    하지만 이 함수를 호출하려면
  • 7:45 - 7:47
    업데이트 함수에 두어야 합니다
  • 7:47 - 7:49
    우리는 이 함수를 고정 업데이트 함수
  • 7:49 - 7:51
    아래의 스크립트에 두겠습니다
  • 7:51 - 7:53
    여기에 업데이트를 할 필요는 없지만
  • 7:53 - 7:55
    스크립트를 읽을 때 흐름을 이해하는 것이
  • 7:55 - 7:57
    쉬워집니다
    업데이트 함수의 위치는
  • 7:57 - 8:00
    어디라도 상관 없으며
    순전히 선호의 문제입니다
  • 8:03 - 8:05
    수행하려는 첫 작업은 [Attract] 버튼의
  • 8:05 - 8:07
    입력을 캐시 하는 것입니다
  • 8:09 - 8:11
    그 다음은 애니메이터 컨트롤러에 대한
  • 8:11 - 8:14
    매개변수로서 이 입력의 구문을 분석해
  • 8:14 - 8:17
    플레이어가 정확한
    애니메이션을 수행하도록 합니다
  • 8:18 - 8:20
    마지막으로 [Shout Bool]의 구문을
  • 8:20 - 8:22
    오디오 관리 함수로 분석해
  • 8:22 - 8:24
    샤우트 재생을 유발하는
  • 8:24 - 8:27
    입력이 되도록 하는 것입니다
  • 8:29 - 8:32
    이제 스크립트를 저장하고
    에디터로 돌아갑니다
  • 8:33 - 8:35
    플레이어의 테스트 준비가 끝났습니다
  • 8:35 - 8:37
    하지만 그 전에 한 번 더 스크립트 폴더를
  • 8:37 - 8:39
    정리하겠습니다
  • 8:39 - 8:41
    [Scripts] 폴더에 [Player]라는
    새 하위 폴더를 추가합니다
  • 8:41 - 8:43
    프로젝트 패널의 [Scripts] 폴더를
  • 8:43 - 8:45
    선택해 [Create] -
  • 8:45 - 8:47
    [Folder]로 갑니다
  • 8:47 - 8:50
    이 폴더를 [Player]라고 합니다
    에셋 폴더를 선택한 후
  • 8:50 - 8:52
    [PlayerMovement]에서
  • 8:52 - 8:54
    이 [Player] 폴더로 드래그합니다
  • 8:55 - 8:58
    이제 반드시 장면과 프로젝트를 저장합니다
  • 9:03 - 9:05
    그러면 플레이어 테스트 준비가 완료됩니다
  • 9:06 - 9:07
    씬 뷰에서 플레이어로부터
  • 9:07 - 9:11
    약간 줌아웃하고 보기를 회전시켜
  • 9:11 - 9:12
    나중에 설치할 카메라의 위치와 비슷한
  • 9:12 - 9:14
    느낌이 들게 합니다
  • 9:14 - 9:16
    테스트 전에 [Shouting] 오디오 클립을
  • 9:16 - 9:19
    [PlayerMovement]
    스크립트에 할당해야 합니다
  • 9:19 - 9:22
    따라서 다시 계층에서 플레이어 캐릭터인
  • 9:22 - 9:24
    [char_ethan]을 선택합니다
  • 9:25 - 9:27
    [PlayerMovement] 스크립트는
    [Shouting] 클립 옆에
  • 9:27 - 9:29
    [None Audio] 클립이
    있음을 알 수 있습니다
  • 9:29 - 9:32
    따라서 [Audio] 폴더에서
  • 9:32 - 9:34
    [PlayerAttractAttention]을 이 변수로
  • 9:34 - 9:35
    드래그합니다
  • 9:36 - 9:38
    이제 테스트를 재생합니다
    인터페이스 상단의
  • 9:38 - 9:40
    재생을 누릅니다
  • 9:41 - 9:43
    장면 패널에서 캐릭터를 관찰하면서
  • 9:43 - 9:45
    조종할 수 있습니다
  • 9:47 - 9:49
    키보드의 화살표 키나 W, A, S 및 D를
  • 9:49 - 9:51
    이용합니다
  • 9:53 - 9:55
    왼쪽 Shift 키를 이용해 스니크할 수 있으며
  • 9:59 - 10:01
    X를 누르면 소리를 지를 수 있습니다
  • 10:05 - 10:08
    테스트를 재생하면서 스니킹 애니메이션이
  • 10:08 - 10:11
    다소 느리다는 것을 알 수 있습니다
  • 10:11 - 10:13
    하지만 매우 간단하게 조절할 수 있습니다
  • 10:13 - 10:15
    재생 버튼을 눌러 테스트를 중단하고
  • 10:16 - 10:18
    [Animator] 창으로 돌아갑니다
  • 10:19 - 10:23
    [Base Layer]에서 [Sneak]
    상태를 선택합니다
  • 10:23 - 10:25
    인스펙터에서 [Speed]를
  • 10:25 - 10:29
    1.7 등의 더 큰 숫자로 설정합니다
  • 10:30 - 10:33
    이제 다시 재생을 누르고
    변경 사항을 확인합니다
  • 10:35 - 10:36
    이동하면서 Shift를 누르면
  • 10:37 - 10:39
    스니킹이 약간 빨라집니다
  • 10:43 - 10:44
    시간을 두고서 게임 개선을 위한 테스트를
  • 10:44 - 10:46
    하면서 이런 조정 작업을
  • 10:46 - 10:47
    수행할 수 있습니다
  • 10:48 - 10:50
    다음 단원에서는
    플레이어의 체력을 관리하는
  • 10:50 - 10:52
    스크립트를 작성해 보겠습니다.
Title:
Stealth game tutorial - 204 - Player Movement - Unity Official Tutorials
Description:

more » « less
Duration:
10:53

Korean subtitles

Revisions