TOOLS GAMES DEVLOG DOCS ABOUT CONTACT
HOME > DOCS > C / raylib > raylib Camera2D 줌, 회전, 룸 바운드(Room Clamp) 및 부드러운 타깃 추적
C / raylib Beginner C99 / raylib 5.0+

raylib Camera2D 줌, 회전, 룸 바운드(Room Clamp) 및 부드러운 타깃 추적

플레이어를 자연스럽게 화면 중앙에 유지하고 레벨 경계선 밖으로 카메라가 벗어나지 않도록 클램핑하며 마우스 휠 줌을 지원하는 raylib 2D 카메라 시스템.

#C #raylib #Camera2D #GameFeel #2DPlatformer
핵심 개념raylib의 Camera2D 구조체는 offset(화면 중심 앵커), target(월드 상 추적 대상), rotation, zoom 네 가지 파라미터로 동작합니다. 지수 감쇠 보간(lerp)과 룸 경계선 클램핑을 적용해 부드러운 카메라워크를 완성합니다.

1. 부드러운 타깃 팔로우 및 바운드 클램프 C 코드

camera_smoothing.c
#include "raylib.h"
#include "raymath.h"

void UpdateSmoothCamera(Camera2D* camera, Vector2 playerPos, Rectangle mapBounds, float dt) {
    // 1. 부드러운 지수 보간 (Smooth follow)
    float smoothSpeed = 8.0f;
    camera->target.x = Lerp(camera->target.x, playerPos.x, smoothSpeed * dt);
    camera->target.y = Lerp(camera->target.y, playerPos.y, smoothSpeed * dt);

    // 2. 맵 경계선 클램핑 (뷰포트 절반 크기 고려)
    Vector2 halfView = { (GetScreenWidth() / 2.0f) / camera->zoom, 
                         (GetScreenHeight() / 2.0f) / camera->zoom };

    camera->target.x = Clamp(camera->target.x, mapBounds.x + halfView.x, 
                             mapBounds.x + mapBounds.width - halfView.x);
    camera->target.y = Clamp(camera->target.y, mapBounds.y + halfView.y, 
                             mapBounds.y + mapBounds.height - halfView.y);
}

참고자료 & 관련 링크