본문 바로가기
게임 프로그래밍/유니티 활용

[유니티 활용] 부드러운 카메라 이동과 경계 값 설정

by 레오란다 2022. 12. 25.
반응형

이번 글에서는 지정한 경계 값 안에서 대상 객체를 따라 이동하는 카메라 구현 방법에 대해 알아보도록 하겠습니다. 이 글은 이전에 작성한 다음 글의 연장선상에서 진행하도록 하겠습니다. 기본 설정은 아래의 글을 참고해 주세요.

 

 

[유니티 활용] Rigidbody2d 를 이용한 캐릭터의 이동과 점프

캐릭터의 이동과 점프 구현에는 다양한 방법이 존재합니다. 이 번 글에서는 다른 오브젝트와의 상호작용을 처리하기에 좋은 물리엔진을 이용해 아래와 같이 캐릭터의 이동과 점프를 구현하는

ugames.tistory.com

 

  • 우선 테스트를 위해 Ground 의 크기를 키우도록 하겠습니다. Ground 의 Transform 과 Material 설정을 다음과 같이 수정해 줍니다.

설정1
Ground 설정

  • Main Camera 에 FollowCam 이름으로 새 스크립트를 생성합니다.
  • 스크립트를 다음과 같이 작성해 줍니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FollowCam : MonoBehaviour
{
   // 카메라가 따라다닐 대상
   public Transform target;

   // 카메라가 대상을 따라가는 속도
   public float smooth = 0.1f;

   // 카메라 위치 조정
   public Vector3 adjustCamPos;

   // 카메라 경계 설정
   public Vector2 minCamLimit;
   public Vector2 maxCamLimit;

   // Update is called once per frame
   void Update()
   {
      if (target == null) return;

      // 카메라의 대상 위치간의 보간
      Vector3 pos = Vector3.Lerp(transform.position, target.position, smooth);

      // 대상과 한계 위치에 따른 카메라 위치
      transform.position = new Vector3(
         Mathf.Clamp(pos.x, minCamLimit.x, maxCamLimit.x) + adjustCamPos.x,
         Mathf.Clamp(pos.y, minCamLimit.y, maxCamLimit.y) + adjustCamPos.y,
         -10f + adjustCamPos.z);
   }
}
  • 이 코드에서 중요한 것은 Vector3.Lerp 와 Mathf.Clamp 입니다.
  • Vector3.Lerp 함수는 첫 번째 인자와 두 번째 인자 사이의 값을 세 번째 인자의 값에 따라 계산된 결과를 리턴합니다. 예를 들어 tranform.position = (0f, 0f, 0f), target.position = (1f, 1f, 1f), smooth = 0.5f 라고 하면 결과는 (0.5f, 0.5f, 0.5f) 가 됩니다.
  • Mathf.Clamp 는 첫 번째 인자로 주어진 값의 범위가 두 번째와 세 번째 인자의 값으로 한정됩니다.
  • FollowCam 에 있는 Target 에 Player 객체를 연결하고 아래와 같이 나머지를 설정해 줍니다.

Main Camera 설정

이제 Play 하고 캐릭터를 움직여 보면 아래와 같이 카메라가 캐릭터를 따라 움직이다가 경계 값에 설정한 위치를 넘어가면 캐릭터를 따라 움직이지 않게 됩니다.

 

 

 

반응형

댓글