내일배움캠프 35일차 TIL
📌 Unity에서 시간 기반 변화 표현하기: AnimationCurve의 강력한 활용법
개념 이해: AnimationCurve란?
AnimationCurve는 시간에 따라 값이 어떻게 변화할지를 커스텀 곡선으로 정의할 수 있는 클래스다. 주로 Evaluate(float time)를 사용해 특정 시간에서의 값을 얻는다. Unity 에디터에서 곡선을 시각적으로 편집할 수 있어 디자이너와의 협업에도 매우 유리하다.
사용한 이유
- 일반적인 Lerp 혹은 Mathf.SmoothStep은 수학적으로 제어는 가능하지만 직관적이지 않다.
- 곡선으로 표현하면 하루 중 어느 시간대가 더 덥거나 더 밝은지 등을 시각적으로 튜닝하기 쉬움.
- Gradient와 함께 사용하면 색상 변화도 시간에 따라 자연스럽게 조절 가능.
내가 구현한 예시
DayNightCycle.cs
시간 값(time)을 0~1 사이의 정규화된 값으로 표현하고, 이를 기준으로 다음 항목을 Evaluate
- 해와 달의 색상 및 밝기
→ sunColor.Evaluate(time), sunIntensity.Evaluate(time) - Ambient light 강도와 반사도
→ lightingIntensityMultiplier.Evaluate(time) - Moon도 같은 방식으로 처리
결과적으로 해는 천천히 떠오르며 붉은빛을 띠고 낮에는 하얗게 밝으며 밤에는 달이 희미한 빛을 비추도록 구현됨
TemperatureManager.cs
시간에 따라 환경 온도를 변화시키기 위해 temperatureCurve.Evaluate(dayNightCycle.time) 사용
추가 응용 가능성
- 물고기의 활동 시간 (아침/저녁에 잘 낚인다 등)
- NPC의 활동/수면 시간대
- 스킬 쿨다운 곡선 (일정 시간 후 빠르게 줄어드는 식)
- 공기 오염도, 습도 등 다양한 환경 수치
✨ 느낀 점
이전엔 매번 수학 함수를 써서 조정했지만, AnimationCurve를 활용하니 조작이 훨씬 직관적이었다.
특히, 시간에 따른 자연스러운 변화가 필요한 모든 요소에 재활용할 수 있다는 점에서 굉장히 범용성이 높다.
시각적으로 곡선을 조정해서 시뮬레이션 게임에 현실감을 부여할 수 있다는 점에서 강한 인상을 받았다.
🧠 기억 포인트
AnimationCurve는 시간 기반 컨트롤러! 시간이 흐르면 값도 흐르게 하자
📌 환경 온도에 따라 변하는 플레이어 체온 시스템 구현기
개념 이해
- 현실 세계에서는 기온에 따라 체온이 서서히 영향을 받는다.
- 체온은 일정 이상/이하로 벗어나면 생명에 치명적이다.
- 이를 게임 시스템에 반영하면 환경과 캐릭터 상태가 연결된 몰입감 있는 경험을 줄 수 있다.
구현 구조
흐름
- DayNightCycle.time → 현재 시간
- TemperatureManager.temperatureCurve.Evaluate(time) → 현재 환경 온도
- 플레이어 체온을 환경 온도에 따라 매 프레임 서서히 조정
float delta = worldTemperature - playerBodyTemperature;
playerBodyTemperature += delta * thermalAdjustmentSpeed * Time.deltaTime;
디버그 출력도 추가
Debug.Log($"[TemperatureManager] 현재 온도: {currentTemperature:F1}°C (시간: {time:F2})");
저체온증 (<= 34도), 고체온증 (>= 39도) 판정 가능하다.
추가 응용 가능성
- 복장/장비에 따른 단열 효과 반영
→ 두꺼운 외투는 추운 날씨에 체온 하락을 줄임 - 불 피우기, 온천, 눈보라 등 특별 환경 요소에 따른 급격한 체온 변화
- HUD로 체온/위험 상태 표현
→ “체온계” UI로 저체온증, 과열 시 시각 경고
구현 중 고민했던 점
- 체온이 너무 빠르게 변화하면 현실감이 사라짐
→ thermalAdjustmentSpeed로 반응 속도 조절 - 온도는 DayNightCycle이 갖고 있는 게 맞는가?
→ 시간은 DayNightCycle, 온도는 TemperatureManager가 책임지는 역할 분리가 적절하다고 판단
✨ 느낀 점
생존 게임에서 단순히 체력/스테미나 외에 온도라는 변수를 추가하니, 시스템이 더 복합적이고 현실적으로 느껴졌다.
서서히 변하는 체온을 통해 외부 환경이 실시간으로 플레이어에게 영향을 준다는 느낌이 들었다.
디자인적 몰입도와 게임성 모두에 큰 플러스가 되는 시스템이라고 생각한다.
🧠 기억 포인트
환경 온도는 결국 '간접 공격력'이다! 체온 변화는 살아 있는 캐릭터가 환경에 반응한다는 증거

'TIL' 카테고리의 다른 글
| Pointy-Top 육각형 외형 맵 생성 (with Unity Tilemap + 사각형 타일) (2) | 2025.06.30 |
|---|---|
| 커스텀 에디터(Custom Editor) (1) | 2025.06.04 |
| [Unity] ScriptableObject (1) | 2025.05.23 |
| 전략 패턴과 SRP로 인벤토리 리팩토링 (0) | 2025.05.22 |
| [Unity] ImageType (1) | 2025.05.21 |