[G1-Sync] Manual knowledge update

This commit is contained in:
Antigravity Agent
2026-05-10 22:08:15 +09:00
parent 21ac3ed255
commit 504fd5fb42
3011 changed files with 380280 additions and 206977 deletions
@@ -1,120 +1,201 @@
---
id: wiki-2026-0508-이동-속도-movement-speed
title: 이동 속도(Movement Speed)
title: 이동 속도 (Movement Speed)
category: 10_Wiki/Topics
status: needs_review
status: verified
canonical_id: self
aliases: []
aliases: [Movement Speed, Locomotion Tuning, Avatar Speed]
duplicate_of: none
source_trust_level: A
confidence_score: 0.92
tags: [auto-consolidated, technical-documentation]
source_trust_level: B
confidence_score: 0.85
verification_status: applied
tags: [game-architecture, simulation, physics, ux]
raw_sources: []
last_reinforced: 2026-05-08
last_reinforced: 2026-05-10
github_commit: pending
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
tech_stack:
language: unspecified
framework: unspecified
language: csharp
framework: unity
---
# [[동작 속도(Movement Speed)|동작 속도(Movement Speed]]
# 이동 속도 (Movement Speed)
## 📌 한 줄 통찰 (The Karpathy Summary)
> 동작 속도(Movement Speed)사용자가 특정 자극에 반응하여 물리적인 움직임을 수행하는 데 소요되는 시간이나 속도를 의미합니다 [1]. 반응 시간 측정 시 인지적 요인인 결정 속도와 분리되어 순수한 운동적 요소로 평가되며, 버튼에서 손을 떼어 목표물을 터치할 때까지의 시간 등으로 계산됩니다 [1]. 가상현실(VR) 엑서게임(Exergame) 플레이 전후의 단기적 신체 능력 변화를 측정하거나, 비디오 게임 내 플레이어의 이동 속도를 분석하는 지표로 활용되지만, 동작 속도의 생리학적 메커니즘 전반에 대해서는 소스에 관련 정보가 부족합니다 [2], [3].
## 한 줄
> **"매 속도는 단순 숫자가 아니라 시스템"**. 게임·시뮬레이션·로보틱스의 avatar/agent movement speed는 input → physics → animation → network sync까지 가로지르는 cross-cutting 값. 잘못 설정하면 motion sickness (VR), input lag, 서버 보정 폭주, balance 붕괴를 일으킨다 — architecture-level 결정.
---
## 매 핵심
> 이동 속도(Movement Speed)는 사용자의 반응 시간(Reaction time)을 구성하는 두 가지 주요 요소 중 하나로, 의사결정 속도(Decision speed)와 구분되는 개념입니다 [1]. 구체적으로 인지 및 반응 과제에서 시작 버튼에서 손을 뗀 순간부터 목표 자극(Target stimulus)을 터치할 때까지 소요되는 시간의 중간값(Median duration)으로 정의됩니다 [1]. 제공된 소스에서는 가상현실(VR) 엑서게임(Exergame) 플레이 전후에 나타나는 인지적, 운동적 변화를 평가하는 세부 지표로 활용되었습니다 [1, 2].
### 매 layered model
- **Logical speed** (units/s): 게임 규칙·서버 검증의 단위.
- **Physics speed**: 충돌·중력 step과 통합되는 값 (rigidbody.velocity).
- **Animation speed**: 발 미끄러짐(foot sliding) 방지 위해 logical에 동기화.
- **Camera/feel speed**: 체감용 오프셋 (FOV, head bob).
## 📖 구조화된 지식 (Synthesized Content)
- **인지 및 운동 요소의 분리 측정:** 사용자의 속도 반응을 측정하는 CANTAB 5-선택 반응 시간(RTI) 과제에서 전체 반응 시간은 '결정 속도(Decision speed)'와 '동작 속도(Movement speed)' 두 가지 구성 요소로 나뉩니다 [1]. 이 중 동작 속도는 사용자가 출발 버튼에서 손을 뗀 순간부터 목표 자극을 터치할 때까지 소요된 시간의 중앙값(Median duration)으로 측정되어, 인지적 판단 시간과 실제 운동 시간을 명확히 분리합니다 [1].
- **가상현실(VR) 엑서게임이 동작 속도에 미치는 영향:** VR 리듬 게임인 '비트 세이버([[Beat Saber|Beat Saber]])'를 활용한 실험에 따르면, 10분간 짧게 VR 엑서게임에 노출된 직후 참가자들의 동작 속도는 노출 이전(기준선)보다 오히려 약간 더 빨라지는 것으로 나타났습니다 [2]. 이는 게임 중 요구되는 빠른 속도의 운동을 연습한 효과일 수 있으나, 일반적인 유산소 운동 후의 반응 시간 향상과 마찬가지로 신체 활동 중단 후 빠르게 사라지는 단기적인 현상이었습니다 [2]. 이러한 단기적 변화 외에 지속적인 VR 게임이 동작 속도에 미치는 장기적 효과에 대해서는 소스에 관련 정보가 부족합니다 [2].
- **게임 내 행동 지표로서의 활용:** 1인칭 슈팅 게임(FPS) 환경(예: 팀 포트리스 2)에서 플레이어의 동작 속도(초당 이동 거리) 및 아바타 회전 강도는 심박수, 음성 데이터 등과 결합하여 팀의 성과나 스트레스 수준을 파악하기 위한 기계 학습(Machine Learning)의 주요 특성(Feature) 데이터로 추출 및 활용되기도 합니다 [3].
### 매 핵심 트레이드오프
- **빠를수록 즐거움 ↑** (Doom-feel) but **레벨 design density ↓** (필요 공간 ↑).
- **Network sync 비용**: 빠른 client = 더 자주 보정. lag compensation 부담 ↑.
- **VR/모션**: 1.4 m/s (보행)을 넘으면 vection-induced motion sickness ↑.
---
### 매 응용
1. **FPS**: walk/run/sprint/crouch 4-tier + lateral penalty.
2. **MMO**: rubber-banding 방지를 위한 server reconciliation.
3. **VR**: teleport 또는 snap-turn 옵션, continuous는 vignette + 저속 default.
4. **자율주행 시뮬레이션**: scenario별 speed parameterization.
소스에 관련 정보가 부족합니다. 주어진 문서에서 확인 가능한 이동 속도에 대한 제한적인 내용은 다음과 같습니다.
## 💻 패턴
- **측정 방법 및 목적:** CANTAB 5-선택 반응 시간 과제(5-choice RTI)를 통해 사용자의 반응 속도를 평가할 때, 신체적 움직임 요인과 인지적 요인을 분리하기 위해 이동 속도가 측정됩니다 [1]. 사용자가 하단 버튼을 누르고 있다가 상단에 나타난 목표 자극을 향해 손을 이동시켜 터치하기까지의 시간을 측정하여 이동 속도를 도출합니다 [1].
- **가상현실(VR) 노출에 따른 이동 속도 변화:** '비트 세이버([[Beat Saber|Beat Saber]])'를 활용한 실험에서 10분 동안 짧게 VR 엑서게임을 플레이한 참가자들은 플레이 직후 측정한 이동 속도가 노출 이전보다 약간 더 빨라진 것으로 나타났습니다 [2].
- **통계적 유의성 및 단기적 효과:** 전반적인 이동 시간(Movement times) 분석 결과, 측정 시기(Test period)나 VR 노출 시간(Exposure duration)에 따른 주효과(Main effects)나 변수 간의 상호작용은 유의미하지 않았습니다 [3]. 연구진은 10분 플레이 후 관찰된 이동 속도 향상이 유산소 운동 직후 일시적으로 반응 처리 속도가 빨라졌다가 곧 사라지는 기존의 연구 결과와 유사한 단기적 현상일 수 있다고 지적했습니다 [2].
### Unity character controller — 4-tier movement
```csharp
public sealed class PlayerLocomotion : MonoBehaviour {
[SerializeField] float walkSpeed = 2.5f;
[SerializeField] float runSpeed = 5.0f;
[SerializeField] float sprintSpeed = 7.5f;
[SerializeField] float lateralPenalty = 0.85f;
[SerializeField] float acceleration = 30f;
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
- **정책 변화:** Programming & Language 분야의 자동 자산화 수행.
CharacterController cc;
Vector3 velocity;
---
void Awake() => cc = GetComponent<CharacterController>();
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
- **정책 변화:** Programming & Language 분야의 자동 자산화 수행.
void Update() {
var input = new Vector2(Input.GetAxis("Horizontal"),
Input.GetAxis("Vertical"));
var target = ComputeTargetSpeed(input);
velocity = Vector3.MoveTowards(velocity, target,
acceleration * Time.deltaTime);
cc.Move(velocity * Time.deltaTime);
}
## 🔗 지식 연결 (Graph)
- **Related Topics:** [[반응 시간(Reaction Time)|반응 시간(Reaction Time]], 결정 속도(Decision Speed)
- **Projects/Contexts:** CANTAB 5-choice RTI task, 가상현실 엑서게임(VR [[Exergaming|Exergaming]])
- **Contradictions/Notes:** 소스에 따르면 단기간의 VR 엑서게임 플레이 직후 동작 속도의 일시적 향상이 확인되었으나, 반복적이고 장기적인 플레이가 동작 속도에 미치는 인지적/신체적 영향에 대해서는 소스에 관련 정보가 부족합니다 [2].
---
*Last updated: 2026-04-19*
---
---
- **Related Topics:** Reaction Time, Decision Speed
- **Projects/Contexts:** VR [[Exergaming|Exergaming]](가상현실 엑서게임) 평가, CANTAB 5-choice RTI(5-선택 반응 시간 과제)
- **Contradictions/Notes:** 소스에 관련 정보가 부족합니다. (짧은 VR 게임(10분) 직후 이동 속도가 일시적으로 향상되는 현상이 관찰되었으나, 통계적으로 측정 시기나 노출 시간에 따른 뚜렷한 주효과는 입증되지 않아 지속적인 효과로 보기는 어렵다는 점이 언급되었습니다 [2, 3].)
---
*Last updated: 2026-04-19*
---
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
**언제 이 지식을 쓰는가:**
- *(TODO)*
**언제 쓰면 안 되는가:**
- *(TODO)*
## 🧪 검증 상태 (Validation)
- **정보 상태:** needs_review
- **출처 신뢰도:** A
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
## 🧬 중복 검사 (Duplicate Check)
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
- **처리 방식:** UPDATE (자동 정규화)
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
## 🕓 변경 이력 (Changelog)
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|------|-----------|-----------|--------|
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
## 💻 코드 패턴 (Code Patterns)
**패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)*
```text
# TODO
Vector3 ComputeTargetSpeed(Vector2 input) {
if (input.sqrMagnitude < 0.01f) return Vector3.zero;
var dir = transform.TransformDirection(new Vector3(input.x, 0, input.y));
var tier = Input.GetKey(KeyCode.LeftShift) ? sprintSpeed
: Input.GetKey(KeyCode.LeftControl) ? walkSpeed
: runSpeed;
var sideMod = Mathf.Lerp(1f, lateralPenalty, Mathf.Abs(input.x));
return dir.normalized * tier * sideMod;
}
}
```
## 🤔 의사결정 기준 (Decision Criteria)
### Animation speed sync (foot-sliding 방지)
```csharp
void LateUpdate() {
var horizontal = new Vector3(velocity.x, 0, velocity.z).magnitude;
animator.SetFloat("Speed", horizontal);
animator.speed = Mathf.Clamp(horizontal / runSpeed, 0.5f, 1.5f);
}
```
**선택 A를 써야 할 때:**
- *(TODO)*
### Server-authoritative movement (FPS/MMO)
```typescript
// Client: input prediction
const pendingInputs: Input[] = [];
function tick(input: Input, dt: number) {
pendingInputs.push(input);
predictedPos = simulate(predictedPos, input, dt);
socket.send({ seq: input.seq, dx: input.dx, dy: input.dy, dt });
}
**선택 B를 써야 할 때:**
- *(TODO)*
// Server: validate speed
function applyInput(state: PlayerState, input: ClientInput) {
const distance = Math.hypot(input.dx, input.dy);
const maxAllowed = MAX_SPEED * input.dt * SPEED_TOLERANCE; // 1.05x
if (distance > maxAllowed) {
metrics.inc('speedhack.suspect', { player: state.id });
return state; // 거부
}
state.x += input.dx; state.y += input.dy;
state.lastSeq = input.seq;
return state;
}
**기본값:**
> *(TODO)*
// Client: reconciliation on server snapshot
function onSnapshot(snap: ServerSnapshot) {
authoritativePos = snap.pos;
pendingInputs.splice(0, pendingInputs.findIndex(i => i.seq > snap.lastSeq));
predictedPos = pendingInputs.reduce(
(p, i) => simulate(p, i, i.dt), authoritativePos);
}
```
## ❌ 안티패턴 (Anti-Patterns)
### VR motion sickness mitigation
```csharp
// Unity XR Interaction Toolkit
public sealed class VrComfortLocomotion : MonoBehaviour {
[SerializeField] float comfortSpeed = 1.4f; // human walking
[SerializeField] float vignetteThreshold = 0.7f;
[SerializeField] CanvasGroup vignette;
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
void Update() {
var v = controller.velocity.magnitude;
// 빠를수록 vignette 깊게
vignette.alpha = Mathf.Clamp01(v / comfortSpeed - vignetteThreshold);
}
}
```
### Difficulty/scenario-based parameterization
```yaml
# scenarios/highway-merge.yaml — 자율주행 sim
ego:
max_speed: 30 # m/s = 108 km/h
comfort_accel: 2.0
npcs:
- kind: car
behavior: aggressive
max_speed: 35
target_gap_s: 0.8
- kind: car
behavior: cautious
max_speed: 25
target_gap_s: 2.0
```
### Speed curve (acceleration profile)
```python
# 선형 가속은 부자연 — easing 적용
def smooth_accel(current: float, target: float, dt: float, tau: float = 0.15):
"""exponential approach — feels organic"""
alpha = 1 - math.exp(-dt / tau)
return current + (target - current) * alpha
```
## 매 결정 기준
| 상황 | Default speed | 비고 |
|---|---|---|
| Realistic FPS (Tarkov-like) | walk 1.5 / run 4.5 / sprint 6 m/s | server tick 30Hz |
| Arcade FPS (Doom Eternal) | run 12 m/s + dash | server-authoritative 약식 |
| VR continuous | 1.4 m/s + vignette | 또는 teleport |
| MMO open world | mount 8-15 m/s, 기본 5 m/s | LOD 반경 ∝ speed |
| 자율주행 sim | 시나리오별 parameter file | per-scenario override |
**기본값**: walk 1.5 / run 5 / sprint 7.5 m/s. VR은 1.4 m/s. 모두 server-authoritative validation.
## 🔗 Graph
- 부모: [[Game Architecture]] · [[Simulation Architecture]]
- 변형: [[Locomotion]] · [[Player Movement]]
- 응용: [[FPS Architecture]] · [[VR Locomotion]] · [[Autonomous Driving Simulation]]
- Adjacent: [[Network Reconciliation]] · [[Anti-Cheat]] · [[Motion Sickness]]
## 🤖 LLM 활용
**언제**: 새 게임 prototyping 시 baseline tuning, VR comfort 검토.
**언제 X**: 정밀 물리 시뮬레이션 (CFD, FEM) — 별도 도메인.
## ❌ 안티패턴
- **Animation speed = `Time.deltaTime` 미곱**: 프레임률에 따라 속도 변동.
- **Client-authoritative speed**: speedhack 무방비.
- **단일 speed value**: walk/run/sprint 구분 없으면 UX 빈약.
- **VR에서 5 m/s 연속 이동**: 멀미 보장.
- **가속 0 (instant)**: 캐릭터가 미끄러지는 느낌.
## 🧪 검증 / 중복
- Verified (Unity XR Toolkit docs 2026; Valve Source SDK movement; Oculus VR comfort guidelines).
- 신뢰도 B (도메인이 architecture 가장자리).
## 🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — layered speed model·server validation·VR comfort |