## 🚉 이동 발판 위의 플레이어 이동 처리
- **문제**: 이동 중인 발판 위에 서 있는 플레이어가, 발판의 움직임에 따라 자연스럽게 따라가야 함.
- **기본 해결 방법**:
- 발판의 `Rigidbody.velocity`를 매 프레임 `플레이어의 velocity`에 **더해주는 방식**이 일반적이다.
- 이를 위해 Player 쪽에서 `isOnMovingPlatform` 상태를 체크하고, `curPlatform.velocity`를 가져와 반영해야 한다.
- **점프 시 고려 사항**:
- 발판이 움직이고 있을 때 점프하면, 발판의 속도를 **점프에도 반영**해줘야 자연스러운 반응이 나온다.
- 예: 점프할 때 `AddForce(jumpPower + curPlatform.velocity)` 방식으로 처리.
---
## 🔦 Raycast 처리 위치 (Update vs FixedUpdate)
- **Raycast는 물리 연산이다**:
- Unity에서 Raycast는 기본적으로 **Physics 엔진의 연산**으로 취급되며, `FixedUpdate`에서 다루는 것이 이상적이다.
- **FixedUpdate가 적합한 이유**:
- Rigidbody, Collider, Raycast 등은 **Fixed timestep**에 맞춰 업데이트되므로 이 안에서 호출하면 충돌 검사도 더 정확하고 예측 가능하다.
- **예외 상황**:
- 프레임 렌더링 기준(시각적 표시)이나 UI 반응용 Raycast라면 `Update`에서 처리해도 무방하다.
- **Tip**: 너무 자주 검사할 필요가 없다면 `Time.time`과 `lastCheck` 등을 활용해 **0.1초 간격 검사**처럼 타이밍 제어 가능.
---
## 💥 OnCollision 관련 문제 해결
- **OnCollisionStay / Enter / Exit 사용 조건**:
- 충돌 처리를 위해서는 두 오브젝트 중 **하나는 Rigidbody**, 다른 하나는 Collider여야 하며, 최소 하나는 `isKinematic == false`여야 함.
- `OnCollision`은 **Collider가 isTrigger == false**일 때만 동작한다.
- **자주 호출되는 OnCollisionStay**:
- 프레임마다 호출되기 때문에 불필요한 연산을 피하기 위해 **Tag 조건, LayerMask 조건, 상태 체크** 등을 병행해 사용해야 한다.
- 예: `if (collision.gameObject.CompareTag("MovingPlatform")) { ... }`
- **OnTrigger와 혼용 주의**:
- `OnTriggerEnter/Stay`는 Collider의 `isTrigger`가 true일 때 동작하므로, 혼용 시 조건과 구조를 명확히 해야 한다.
---
## 👤 플레이어 싱글톤화의 장단점
- **장점**:
- 어디서든 `Player.Instance`를 통해 쉽게 접근 가능.
- 게임 전체에서 유일한 플레이어 오브젝트를 관리하기 편하다.
- **단점 / 주의점**:
- 다른 스크립트들이 플레이어를 **직접 참조**하게 되면, 종속성이 커지고 **유닛 테스트나 재사용이 어려워짐**.
- 발판 등 여러 오브젝트가 플레이어를 바라보면, **역참조가 복잡**해질 수 있다.
- **대안**:
- 이벤트 기반 시스템 (예: `OnPlatformTouched`)으로 decoupling.
- 필요 시 `FindObjectOfType<PlayerController>()`나 `Interface` 활용도 가능.
---
## 🔄 코루틴 실행 수와 동시성
- **코루틴은 동시에 여러 개 실행 가능**하다.
- 예: `StartCoroutine(MovePlatform());`를 여러 오브젝트에서 동시에 호출해도 각자의 흐름으로 독립 실행됨.
- **주의 사항**:
- 코루틴 간에 **공유 자원(예: static 변수)** 을 사용하면 경합이 생길 수 있음.
- 코루틴 내부에서 `WaitForSeconds`, `yield return`을 적절히 사용해 흐름을 조절해야 함.
- **유용한 패턴**:
- 발판의 왕복 이동, 공격 쿨다운, 애니메이션 타이밍 등 시간 흐름이 중요한 로직에 적합.
'[내일배움캠프 Unity 9기]' 카테고리의 다른 글
| 05/26 TIL Unity Fusion2 / 오브젝트 풀 (0) | 2025.05.26 |
|---|---|
| 05/23 TIL 개인 과제 제출 및 팀프로젝트 시작 전 퓨전2 입문하기 (0) | 2025.05.23 |
| 05/21 TIL (0) | 2025.05.21 |
| 05/20 트러블 슈팅 및 개인 과제 시작 (1) | 2025.05.20 |
| 05/19 TIL 스카이 박스의 애니메이션 설정, 조명 처리 (1) | 2025.05.19 |