🗓️ 오늘 하루 일정
✅ 오전
- 09:00 ~ 11:00 : 점프 애니메이션 추가 (OnTriggerEnter에 JumpTrigger 트리거 연동, AddForce로 물리 튕김 적용)
- 11:00 ~ 13:00 : 맵 제작 진행 (지형 구성, 오브젝트 배치 일부)
🍽️ 점심시간
- 13:00 ~ 14:00 : 점심시간
✅ 오후
- 14:00 ~ 16:00 : 맵 배치 마무리 작업
- 16:00 ~ 18:00 : 챌린지반 강의 수강 (주제: 델리게이트)
- 18:00 ~ 19:00 : 자유시간 및 휴식
🍽️ 저녁시간
- 19:00 ~ 20:00 : 맵 최종 점검 및 세부 수정
- 20:00 ~ 21:00 : 맵 제작 완성, 마무리 테스트
✅ 오늘 학습 키워드
- Unity OnTriggerEnter 활용
- Rigidbody 물리 처리 (AddForce, y속도 초기화)
- Animator Trigger 파라미터 활용 (SetTrigger)
- 맵 제작 및 오브젝트 배치
- C# 델리게이트(Delegate) 개념 및 활용
✅ 오늘 학습 한 내용을 나만의 언어로 정리하기
오늘 오전에는 OnTriggerEnter를 이용해 플레이어가 특정 트리거 존에 닿았을 때 점프 애니메이션과 물리적인 튕김 효과가 동시에 적용되도록 구현했다.
Rigidbody의 y속도를 0으로 초기화해 낙하 중에도 깔끔하게 위로 튀어 오를 수 있도록 처리했고, anim.SetTrigger("JumpTrigger")를 사용해 애니메이션을 재생하도록 했다. 물리 처리는 AddForce(Vector3.up * jumpForce, forceMode)로 구현하여 위쪽으로 힘을 가했다.
오후에는 맵 제작을 이어서 진행했다. 지형과 오브젝트를 배치하고, 동선과 분위기를 고려한 레이아웃을 구성했다. 배치 작업은 생각보다 시간이 오래 걸렸지만, 어느 정도 완성도를 갖춘 상태로 마무리할 수 있었다.
또한 챌린지반 강의에서 C# 델리게이트에 대해 학습했다. 델리게이트가 메서드를 변수처럼 다룰 수 있게 해주는 타입이라는 점, 그리고 멀티캐스트, 익명 메서드, 람다식, 이벤트와의 관계까지 배우면서 이벤트 처리나 콜백 구조를 만들 때 얼마나 유용한지 이해할 수 있었다.
🧩 학습하며 겪었던 문제점 & 에러
1) 점프 애니메이션과 물리 힘 적용 타이밍
- 문제정의
- 트리거 존에 닿았을 때 점프 애니메이션은 실행되지만, 물리적으로 위로 튀는 타이밍이 애니메이션과 완전히 맞지 않아 시각적으로 어색했다.
- 시도
- 단순히 OnTriggerEnter에서 SetTrigger와 AddForce를 동시에 호출하여 처리했다.
- 해결방법이후에는 Animation Event를 이용하면 타이밍을 더 정확히 맞출 수 있다는 점을 메모해 두었다.
- 우선 애니메이션 트리거는 그대로 유지하되, 물리 힘은 y속도를 초기화한 후 즉시 적용하여 낙하 중에도 부드럽게 튀어 오르게 했다.
- 예시 코드
private void OnTriggerEnter(Collider other)
{
if (!string.IsNullOrEmpty(targetTag) && !other.CompareTag(targetTag)) return;
Rigidbody rb = other.attachedRigidbody;
if (rb != null)
{
if (resetVerticalVelocity)
{
Vector3 v = rb.velocity;
v.y = 0f;
rb.velocity = v;
}
anim.SetTrigger("JumpTrigger"); // 애니메이션 재생
rb.AddForce(Vector3.up * jumpForce, forceMode); // 물리 힘 적용
}
}
- 새롭게 알게 된 점
- 애니메이션과 물리 동작을 정확히 동기화하려면 Animator의 트리거만 사용하는 것이 아니라 애니메이션 이벤트나 코루틴 지연 실행으로 타이밍을 조절하는 것이 좋다.
- 다시 만나게 된다면
- 다음번에는 애니메이션 클립에 이벤트를 추가해, 특정 프레임에서만 힘을 적용하도록 구현할 것이다.
📝 메모
오늘은 오전에 점프 애니메이션과 물리 튕김 처리를 구현하고, 오후에는 맵 배치를 마무리했다. 사실 맵 제작은 하다 보면 끝이 없는데, 오늘은 적당한 선에서 마무리하기로 결정했다. 완벽하게 만들려고 욕심내기보다 지금 상태에서 충분히 플레이가 가능한 수준이라면 더 이상 붙잡지 않는 게 오히려 효율적이라는 걸 느꼈다.
델리게이트 강의를 들으면서, 메서드를 변수처럼 다루고 콜백 구조를 쉽게 만들 수 있다는 점이 인상 깊었다. 앞으로 이벤트나 UI 버튼 클릭 처리, 플레이어 상태 변화 알림 등 다양한 곳에 적용할 수 있을 것 같아 기대된다.
내일은 오늘 만든 맵에서 직접 플레이 테스트를 하면서, 필요한 최소한의 수정만 하고 다른 기능 구현에 들어가야겠다.
'스파르타 코딩클럽 > TIL작성' 카테고리의 다른 글
내일배움캠프 31일차 TIL [Project_Up] (3) | 2025.08.11 |
---|---|
내일배움캠프 30일차 TIL [Project_Up] (3) | 2025.08.08 |
내일배움캠프 29일차 TIL [인벤토리 시스템 구현] (2) | 2025.08.07 |
내일배움캠프 28일차 TIL [Input System과 디자인 패턴 정리] (3) | 2025.08.06 |
내일배움캠프 27일차 TIL [팀프로젝트 마무리 + 발표] (3) | 2025.08.05 |