쫑가 과정

카메라 플레이어 부드럽게 따라가기, 카메라 경계 설정. 본문

Unity 따라 배우기/Topdown 2D RPG In Unity

카메라 플레이어 부드럽게 따라가기, 카메라 경계 설정.

쫑가 2022. 2. 22. 20:14
public class MainCameraController : MonoBehaviour
{
    [SerializeField] Transform player;
    private void LateUpdate()
    {
        Vector3 targetPos = new Vector3(player.position.x, player.position.y, this.transform.position.z);
        transform.position = targetPos;
    }
}

카메라가 따라갈 위치 변수를 만들어주고, 카메라 위치를 위치 변수로 설정하면 된다.

중요한 건 LateUpdate메서드를 사용해야 한다는 것이다. 

플레이어가 움직이면 위치가 변경되는데 카메라 위치도 같은 프레임에 변경되게 하면 카메라 위치가 버벅된다.

플레이어 위치가 변경된 후 카메라 위치가 변경되게 하자.

Update보다 늦게 동작되는 LateUpdate를 사용해야 한다.

 

부드럽게 변경

using UnityEngine;

public class MainCameraController : MonoBehaviour
{
    [SerializeField] Transform player;
    [SerializeField] float smoothing = 0.2f;
    private void FixedUpdate()
    {
        Vector3 targetPos = new Vector3(player.position.x, player.position.y, this.transform.position.z);
        transform.position = Vector3.Lerp(transform.position, targetPos, smoothing);
    }
    /*private void LateUpdate()
    {
        Vector3 targetPos = new Vector3(player.position.x, player.position.y, this.transform.position.z);
        transform.position = targetPos;
    }*/
}

Vector3.Lerp를 사용하는데 여기서는 FixedUpdate를 사용한다.

(캐릭터는 FixedUpdate로 움직이게 해 놨기에 FixedUpdate사용, 만약 Update를 사용했다면 Update로 다르면 버벅된다)

Lerp자체가 설정한 float에 따라 부드럽게 변경되기에 LateUpdate를 사용하면 버벅된다.

 

간단하게 카메라 경계 설정

using UnityEngine;

public class MainCameraController : MonoBehaviour
{
    [SerializeField] Transform player;
    [SerializeField] float smoothing = 0.2f;
    [SerializeField] Vector2 minCameraBoundary;
    [SerializeField] Vector2 maxCameraBoundary;
    private void FixedUpdate()
    {
        Vector3 targetPos = new Vector3(player.position.x, player.position.y, this.transform.position.z);

        targetPos.x = Mathf.Clamp(targetPos.x, minCameraBoundary.x, maxCameraBoundary.x);
        targetPos.y = Mathf.Clamp(targetPos.y, minCameraBoundary.y, maxCameraBoundary.y);

        transform.position = Vector3.Lerp(transform.position, targetPos, smoothing);
    }

카메라 위치는 타겟 위치를 따라가므로 타깃 위치에 제한을 준다.

Mathf.Clamp를 사용해 제한을 주자.

https://docs.unity3d.com/ScriptReference/Mathf.Clamp.html

 

Unity - Scripting API: Mathf.Clamp

Returns the min value if the given value is less than the min value. Returns the max value if the given value is greater than the max value. The min and max parameters are inclusive. For example, Clamp(10, 0, 5) will return a maximum argument of 5 and not

docs.unity3d.com

최솟값 지정

최댓값 지정

결과

Comments