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 는 마우스 시선으로 조작이 달라지는 것을 비교해 보세요.