01 캐릭터 이동·조작·카메라 - jes79/Unity-AI-Glossary-Playground GitHub Wiki

01 캐릭터 이동·조작·카메라

'손맛'은 대부분 이 분야 용어에서 나옵니다. 점프가 답답하면 코요테 타임과 점프 버퍼링부터 요청하세요.

씬 15개 · 폴더 Assets/00_Scenes/01_Movement

번호 용어 쉽게 말하면 씬에서 보여 주는 것 구현 방식
0101 Character Controller 물리 없이 벽·경사를 처리하는 이동 컴포넌트 WASD·점프, slopeLimit 45° 이하 경사만 오름, 계단은 오르고 턱은 막힘 런타임 데모
0102 Rigidbody 이동 물리 엔진으로 미는 이동 FixedUpdate에서 linearVelocity 이동 vs transform 직접 이동 비교 런타임 데모
0103 New Input System 키보드·패드·터치를 한 번에 처리하는 입력 방식 코드로 만든 InputActionAsset(Move·Jump·Attack, 키보드+게임패드), 이벤트 로그 런타임 데모
0104 가속/감속 (Acceleration) 바로 최고 속도가 아니라 서서히 빨라지고 멈춤 가속 0.2초 / 감속 0.1초 vs 즉시 반응, 속도 그래프 런타임 데모
0105 코요테 타임 발판에서 떨어진 직후에도 잠깐 점프 허용 발판 끝에서 떨어진 뒤 0.1초 동안 점프 허용, ON/OFF 비교 런타임 데모
0106 점프 버퍼링 착지 직전에 누른 점프를 기억했다 실행 착지 직전 점프 입력 0.15초 버퍼, ON/OFF 비교 런타임 데모
0107 가변 점프 오래 누르면 높게, 짧게 누르면 낮게 버튼을 떼면 상승 속도 감소, 최고점 표시 런타임 데모
0108 대시 / 회피(구르기) 짧은 순간 이동, 무적 시간 포함 가능 Shift 0.2초 대시 + 무적(총알 통과), 쿨타임 1초 런타임 데모
0109 벽 점프 / 벽 타기 벽에 붙어 미끄러지거나 차고 오름 벽에 붙어 천천히 미끄러지고 반대 방향 벽 점프 런타임 데모
0110 Ground Check 땅에 서 있는지 판정 발밑 SphereCast로 Ground 레이어만 인식, Raycast 비교 런타임 데모
0111 Cinemachine 카메라 자동 추적·전환 도구 Cinemachine 3인칭 카메라, 우클릭 드래그 궤도 회전, 카메라 블렌드 런타임 데모
0112 카메라 Dead Zone / Damping 조금 움직일 땐 카메라 고정, 부드럽게 따라옴 2D 카메라 Dead Zone 표시 + Damping 0.5 런타임 데모
0113 카메라 쉐이크 (Screen Shake) 타격·폭발 시 화면 흔들림 Cinemachine Impulse로 피격 시 0.2초 카메라 쉐이크 런타임 데모
0114 록온 (Target Lock) 적을 고정 조준 Tab으로 가장 가까운 적 록온, 카메라가 적을 바라봄 런타임 데모
0115 탑다운 / 쿼터뷰 / 횡스크롤 / FPS / TPS 시점 종류 1~5로 탑다운 / 쿼터뷰(클릭 이동) / 횡스크롤 / FPS / TPS 전환 런타임 데모

항목별 상세

0101

Character Controller — 물리 없이 벽·경사를 처리하는 이동 컴포넌트

요청 예문: "CharacterController로 WASD 이동과 점프를 만들어줘. 경사 45도까지 오르게 해줘."

  • 씬: Assets/00_Scenes/01_Movement/0101_CharacterController.unity
  • 핵심 스크립트: CharacterControllerMover
  • 빌더: Assets/01_Scripts/Editor/Scenes/01_Movement/Build0101_CharacterController.cs
  • 구현 방식: 런타임 데모
  • 개념: 캡슐 모양 충돌체를 가진 이동 전용 컴포넌트. Rigidbody 물리를 쓰지 않고 Move() 로 직접 밀어 주며, 경사·계단·벽 밀림을 컴포넌트가 알아서 처리한다. 밀리거나 날아가는 물리 반응이 필요 없는 플레이어 조작에 가장 흔히 쓴다.
  • 씬에서 보여 주는 것: WASD·점프, slopeLimit 45° 이하 경사만 오름, 계단은 오르고 턱은 막힘
  • 확인 포인트: WASD 로 경사를 올라가 보세요. slopeLimit 45° 보다 완만한 경사는 올라가고 더 급한 경사는 막힙니다. 계단은 stepOffset 만큼 자동으로 올라가고, 그보다 높은 턱에서는 멈춥니다.

0102

Rigidbody 이동 — 물리 엔진으로 미는 이동

요청 예문: "Rigidbody 기반 이동으로 바꾸고 FixedUpdate에서 velocity로 움직이게 해줘."

  • 씬: Assets/00_Scenes/01_Movement/0102_RigidbodyMovement.unity
  • 핵심 스크립트: RigidbodyMover
  • 빌더: Assets/01_Scripts/Editor/Scenes/01_Movement/Build0102_RigidbodyMovement.cs
  • 구현 방식: 런타임 데모
  • 개념: Rigidbody 에 속도나 힘을 주어 물리 엔진이 이동을 계산하게 하는 방식. 충돌·관성·중력이 공짜로 따라오지만 입력 반응이 한 프레임 늦고, 반드시 FixedUpdate 에서 다뤄야 떨림이 없다.
  • 씬에서 보여 주는 것: FixedUpdate에서 linearVelocity 이동 vs transform 직접 이동 비교
  • 확인 포인트: 왼쪽(물리 이동)과 오른쪽(transform 직접 이동) 두 캐릭터를 같이 움직여 벽에 부딪혀 보세요. 물리 쪽은 벽에 막히고 미끄러지는데, transform 쪽은 벽을 파고들거나 떨립니다.

0103

New Input System — 키보드·패드·터치를 한 번에 처리하는 입력 방식

요청 예문: "New Input System으로 Move, Jump, Attack 액션을 만들고 게임패드도 지원해줘."

  • 씬: Assets/00_Scenes/01_Movement/0103_NewInputSystem.unity
  • 핵심 스크립트: InputActionsPlayer
  • 빌더: Assets/01_Scripts/Editor/Scenes/01_Movement/Build0103_NewInputSystem.cs
  • 구현 방식: 런타임 데모
  • 개념: 키보드·게임패드·터치를 Move, Jump 같은 추상적인 액션으로 묶어 두고, 장치가 바뀌어도 같은 코드로 받는 입력 시스템. 구 Input.GetKey 방식과 달리 키 재설정·멀티 플랫폼·로컬 멀티플레이를 설정만으로 지원한다.
  • 씬에서 보여 주는 것: 코드로 만든 InputActionAsset(Move·Jump·Attack, 키보드+게임패드), 이벤트 로그
  • 확인 포인트: WASD 와 게임패드 스틱이 같은 Move 액션으로 들어오는지, 오른쪽 이벤트 로그에 performed/canceled 가 찍히는지 보세요. 패드를 연결해 두면 키보드와 번갈아 써도 끊기지 않습니다.

0104

가속/감속 (Acceleration) — 바로 최고 속도가 아니라 서서히 빨라지고 멈춤

요청 예문: "이동에 가속 0.2초, 감속 0.1초를 넣어서 미끄러지는 느낌을 줘."

  • 씬: Assets/00_Scenes/01_Movement/0104_Acceleration.unity
  • 핵심 스크립트: AccelerationRunner, AccelerationDemo
  • 빌더: Assets/01_Scripts/Editor/Scenes/01_Movement/Build0104_Acceleration.cs
  • 구현 방식: 런타임 데모
  • 개념: 입력이 들어온 순간 최고 속도로 튀지 않게 목표 속도까지 서서히 올리고, 손을 떼면 서서히 멈추는 처리. 가속·감속 시간이 캐릭터의 무게감을 결정해서, 짧으면 경쾌하고 길면 묵직·미끄러운 느낌이 된다.
  • 씬에서 보여 주는 것: 가속 0.2초 / 감속 0.1초 vs 즉시 반응, 속도 그래프
  • 확인 포인트: A/D 를 짧게 톡 눌러 보세요. 가속 0.2초·감속 0.1초 캐릭터는 부드럽게 출발·정지하고, 즉시 반응 캐릭터는 딱딱하게 움직입니다. 아래 속도 그래프의 기울기 차이로도 보입니다.

0105

코요테 타임 — 발판에서 떨어진 직후에도 잠깐 점프 허용

요청 예문: "코요테 타임 0.1초를 넣어줘."

  • 씬: Assets/00_Scenes/01_Movement/0105_CoyoteTime.unity
  • 핵심 스크립트: CoyoteTimePlayer
  • 빌더: Assets/01_Scripts/Editor/Scenes/01_Movement/Build0105_CoyoteTime.cs
  • 구현 방식: 런타임 데모
  • 개념: 발판에서 떨어진 뒤에도 아주 짧은 시간(보통 0.1초) 동안 점프를 허용하는 기법. 플레이어는 분명히 눌렀다고 느끼는데 실제로는 한두 프레임 늦은 입력이 많아, 이걸 넣으면 조작이 억울하지 않게 느껴진다.
  • 씬에서 보여 주는 것: 발판 끝에서 떨어진 뒤 0.1초 동안 점프 허용, ON/OFF 비교
  • 확인 포인트: 발판 끝에서 살짝 떨어진 직후 Space 를 눌러 보세요. ON 이면 공중에서도 점프가 되고, C 로 OFF 하면 같은 타이밍에 그냥 떨어집니다.

0106

점프 버퍼링 — 착지 직전에 누른 점프를 기억했다 실행

요청 예문: "점프 버퍼링 0.15초를 추가해줘."

  • 씬: Assets/00_Scenes/01_Movement/0106_JumpBuffering.unity
  • 핵심 스크립트: JumpBufferPlayer
  • 빌더: Assets/01_Scripts/Editor/Scenes/01_Movement/Build0106_JumpBuffering.cs
  • 구현 방식: 런타임 데모
  • 개념: 착지하기 전에 미리 누른 점프 입력을 버퍼에 기억해 두었다가, 땅에 닿는 순간 바로 실행하는 기법. 코요테 타임과 짝으로 쓰이며 연속 점프가 끊기지 않게 한다.
  • 씬에서 보여 주는 것: 착지 직전 점프 입력 0.15초 버퍼, ON/OFF 비교
  • 확인 포인트: 착지 직전에 Space 를 미리 눌러 보세요. ON 이면 땅에 닿는 순간 바로 점프하고, J 로 OFF 하면 입력이 버려져 한 번 쉬었다 눌러야 합니다.

0107

가변 점프 — 오래 누르면 높게, 짧게 누르면 낮게

요청 예문: "버튼을 떼면 상승 속도를 줄이는 가변 점프로 만들어줘."

  • 씬: Assets/00_Scenes/01_Movement/0107_VariableJump.unity
  • 핵심 스크립트: VariableJumpPlayer
  • 빌더: Assets/01_Scripts/Editor/Scenes/01_Movement/Build0107_VariableJump.cs
  • 구현 방식: 런타임 데모
  • 개념: 점프 버튼을 누르고 있는 동안만 상승을 유지하고, 떼면 상승 속도를 깎아 낮게 뛰게 만드는 처리. 한 번의 점프로 높낮이를 조절할 수 있어 플랫포머 조작감의 기본이 된다.
  • 씬에서 보여 주는 것: 버튼을 떼면 상승 속도 감소, 최고점 표시
  • 확인 포인트: Space 를 짧게 톡 / 길게 꾹 눌러 최고점 표시선을 비교해 보세요. 버튼을 떼는 순간 상승이 꺾이는 것이 보입니다.

0108

대시 / 회피(구르기) — 짧은 순간 이동, 무적 시간 포함 가능

요청 예문: "Shift로 0.2초 대시하고 그동안 무적(i-frame), 쿨타임 1초로 해줘."

  • 씬: Assets/00_Scenes/01_Movement/0108_DashDodge.unity
  • 핵심 스크립트: DashPlayer, DashTurret
  • 빌더: Assets/01_Scripts/Editor/Scenes/01_Movement/Build0108_DashDodge.cs
  • 구현 방식: 런타임 데모
  • 개념: 짧은 시간 동안 평소보다 빠르게 이동하는 기술. 보통 무적 시간과 쿨타임이 함께 붙어서, 공격을 피하는 보상형 조작으로 쓰인다.
  • 씬에서 보여 주는 것: Shift 0.2초 대시 + 무적(총알 통과), 쿨타임 1초
  • 확인 포인트: 날아오는 총알에 맞춰 Shift 를 눌러 보세요. 대시 0.2초 동안은 총알이 몸을 통과하고(무적), 쿨타임 1초가 끝나기 전에는 다시 대시가 안 됩니다.

0109

벽 점프 / 벽 타기 — 벽에 붙어 미끄러지거나 차고 오름

요청 예문: "벽에 닿으면 천천히 미끄러지고 반대 방향으로 벽 점프하게 해줘."

  • 씬: Assets/00_Scenes/01_Movement/0109_WallJump.unity
  • 핵심 스크립트: WallJumpPlayer
  • 빌더: Assets/01_Scripts/Editor/Scenes/01_Movement/Build0109_WallJump.cs
  • 구현 방식: 런타임 데모
  • 개념: 벽에 붙었을 때 낙하 속도를 줄여 미끄러지게 하고, 점프하면 벽 반대 방향으로 튕겨 나가게 하는 이동. 수직 지형을 올라가는 수단이자 숙련도를 보여 주는 조작이 된다.
  • 씬에서 보여 주는 것: 벽에 붙어 천천히 미끄러지고 반대 방향 벽 점프
  • 확인 포인트: 벽으로 이동 키를 누른 채 붙어 보세요. 천천히 미끄러지고, 그 상태에서 Space 를 누르면 벽 반대 방향으로 튀어 오릅니다.

0110

Ground Check — 땅에 서 있는지 판정

요청 예문: "발밑 SphereCast로 Ground Check를 만들고 Ground 레이어만 인식하게 해줘."

  • 씬: Assets/00_Scenes/01_Movement/0110_GroundCheck.unity
  • 핵심 스크립트: GroundCheckPlayer
  • 빌더: Assets/01_Scripts/Editor/Scenes/01_Movement/Build0110_GroundCheck.cs
  • 구현 방식: 런타임 데모
  • 개념: 발밑에 작은 Raycast 또는 SphereCast 를 쏴 땅에 서 있는지 판정하는 처리. 점프 가능 여부, 착지 연출, 애니메이션 전환이 모두 이 판정 하나에 달려 있어 정확도가 중요하다.
  • 씬에서 보여 주는 것: 발밑 SphereCast로 Ground 레이어만 인식, Raycast 비교
  • 확인 포인트: 경사·모서리에 서서 isGrounded 표시를 보세요. SphereCast 는 모서리에서도 안정적으로 true 인데, 가는 Raycast 는 모서리에서 깜빡입니다. Ground 레이어가 아닌 상자 위에서는 판정되지 않습니다.

0111

Cinemachine — 카메라 자동 추적·전환 도구

요청 예문: "Cinemachine으로 3인칭 카메라를 만들고 마우스로 궤도 회전하게 해줘."

  • 씬: Assets/00_Scenes/01_Movement/0111_Cinemachine.unity
  • 핵심 스크립트: OrbitCameraInput
  • 빌더: Assets/01_Scripts/Editor/Scenes/01_Movement/Build0111_Cinemachine.cs
  • 구현 방식: 런타임 데모
  • 개념: 카메라 추적·전환을 컴포넌트 설정으로 처리하는 Unity 공식 카메라 패키지. 여러 Cinemachine 카메라의 우선순위를 바꾸면 블렌딩까지 알아서 해 주므로, 카메라 코드를 직접 쓰는 일이 거의 없어진다.
  • 씬에서 보여 주는 것: Cinemachine 3인칭 카메라, 우클릭 드래그 궤도 회전, 카메라 블렌드
  • 확인 포인트: WASD 로 움직이면 카메라가 따라오고, 우클릭 드래그로 궤도 회전이 됩니다. 카메라 전환 버튼을 누르면 두 카메라 사이가 뚝 끊기지 않고 블렌딩되는지 보세요.

0112

카메라 Dead Zone / Damping — 조금 움직일 땐 카메라 고정, 부드럽게 따라옴

요청 예문: "2D 카메라에 Dead Zone을 주고 Damping 0.5로 부드럽게 따라오게 해줘."

  • 씬: Assets/00_Scenes/01_Movement/0112_CameraDeadZoneDamping.unity
  • 핵심 스크립트: DeadZoneDemo
  • 빌더: Assets/01_Scripts/Editor/Scenes/01_Movement/Build0112_CameraDeadZoneDamping.cs
  • 구현 방식: 런타임 데모
  • 개념: 카메라가 따라가지 않는 중앙 영역(Dead Zone)과, 따라갈 때의 부드러움(Damping)을 조절하는 설정. 작은 움직임마다 카메라가 흔들리면 멀미가 나기 때문에 거의 모든 2D·3D 게임이 쓴다.
  • 씬에서 보여 주는 것: 2D 카메라 Dead Zone 표시 + Damping 0.5
  • 확인 포인트: 화면에 표시된 Dead Zone 사각형 안에서 조금씩 움직여 보세요. 카메라가 가만히 있습니다. 사각형을 벗어나면 Damping 0.5 만큼 늦게 부드럽게 따라옵니다.

0113

카메라 쉐이크 (Screen Shake) — 타격·폭발 시 화면 흔들림

요청 예문: "Cinemachine Impulse로 피격 시 0.2초 카메라 쉐이크를 넣어줘."

  • 씬: Assets/00_Scenes/01_Movement/0113_ScreenShake.unity
  • 핵심 스크립트: ScreenShakeDemo
  • 빌더: Assets/01_Scripts/Editor/Scenes/01_Movement/Build0113_ScreenShake.cs
  • 구현 방식: 런타임 데모
  • 개념: 타격·폭발 순간 카메라를 짧게 흔들어 충격을 전달하는 연출. 세기와 지속 시간이 과하면 멀미를 유발하므로 0.1~0.3초 정도로 짧게 쓰는 것이 기본이다.
  • 씬에서 보여 주는 것: Cinemachine Impulse로 피격 시 0.2초 카메라 쉐이크
  • 확인 포인트: 피격·폭발 버튼을 눌러 0.2초 동안 화면이 흔들리고 곧 원래 위치로 돌아오는지 보세요. 흔들림이 끝난 뒤 카메라가 삐뚤게 남지 않아야 정상입니다.

0114

록온 (Target Lock) — 적을 고정 조준

요청 예문: "Tab으로 가장 가까운 적에 록온하고 카메라가 적을 바라보게 해줘."

  • 씬: Assets/00_Scenes/01_Movement/0114_TargetLock.unity
  • 핵심 스크립트: TargetLockPlayer, LockOnCamera
  • 빌더: Assets/01_Scripts/Editor/Scenes/01_Movement/Build0114_TargetLock.cs
  • 구현 방식: 런타임 데모
  • 개념: 가까운 적을 하나 골라 카메라와 조준을 그 대상에 고정하는 기능. 액션 게임에서 조작 부담을 줄여 주고, 대상이 죽거나 멀어지면 자동으로 해제하는 처리가 함께 필요하다.
  • 씬에서 보여 주는 것: Tab으로 가장 가까운 적 록온, 카메라가 적을 바라봄
  • 확인 포인트: Tab 으로 가장 가까운 적을 록온해 보세요. 카메라가 그 적을 계속 바라보고, 이동해도 시선이 유지됩니다. 다시 Tab 을 누르면 해제됩니다.

0115

탑다운 / 쿼터뷰 / 횡스크롤 / FPS / TPS — 시점 종류

요청 예문: "쿼터뷰 시점에서 마우스 클릭한 위치로 이동하게 해줘."

  • 씬: Assets/00_Scenes/01_Movement/0115_CameraViewTypes.unity
  • 핵심 스크립트: ViewTypesController
  • 빌더: Assets/01_Scripts/Editor/Scenes/01_Movement/Build0115_CameraViewTypes.cs
  • 구현 방식: 런타임 데모
  • 개념: 같은 월드를 카메라 위치·각도·투영 방식만 바꿔 탑다운, 쿼터뷰, 횡스크롤, FPS, TPS 로 보여 주는 시점 분류. 장르를 정할 때 가장 먼저 고르는 요소이며 조작 방식도 함께 바뀐다.
  • 씬에서 보여 주는 것: 1~5로 탑다운 / 쿼터뷰(클릭 이동) / 횡스크롤 / FPS / TPS 전환
  • 확인 포인트: 1~5 로 시점을 바꿔 보세요. 같은 캐릭터인데 쿼터뷰는 클릭 이동, 횡스크롤은 좌우만, FPS 는 마우스 시선으로 조작이 달라지는 것을 비교해 보세요.