Unity/Unity

[Unity 2D]카메라 캐릭터 추적 & 경계 처리 - Hide

zz0zz9 2025. 5. 2. 14:58
반응형
반응형
결과


스크립트 생성 및 작성

MainCamera에 넣을 스크립트를 생성한다.

(이름은 아무거나 상관없는데 Camera라고 짓는 건 비추)

 

using UnityEngine;

public class CameraFollow : MonoBehaviour
{
    public Transform player;
    private Vector3 offset=new Vector3(0,0,-10);

    void Update()
    {
        if(player!=null) transform.position=player.position+offset;
    }
}

 

 

 

적용

스크립트를 MainCamera에 넣고 Player라고 쓰인 부분에 따라다니고자 하는 오브젝트 넣기

 

이렇게 해서 카메라는 플레이어를 따라다닐 수 있게 됐다.

 

이를 응용해 카메라가 맵의 경계에 도달했을 때 어떻게 동작할지를 정의한 두 가지 방법을 소개한다.

(카메라 이동만 보여주기 위해 플레이어와 경계선의 충돌 처리는 생략)


카메라 이동 ver 1.

 

맵의 경계가 카메라 화면 중앙에 도달하면 카메라는 해당 방향으로 더 이상 이동하지 않는다.

 

결과

 

 

 

스크립트
using UnityEngine;

public class CameraFollow : MonoBehaviour
{
    public Transform player;
    public float minX, maxX, minY, maxY;

    void Update()
    {
        if(player==null) return;
        
        float camX=Mathf.Clamp(player.position.x,minX,maxX);
        float camY=Mathf.Clamp(player.position.y,minY,maxY);
        transform.position=new Vector3(camX,camY,-10f);
    }
}

(minX, maxX, minY, maxY는 각각 위와 같이 설정해 줬다.)

 

 

 

카메라 이동 ver 2.

 

카메라의 시야가 맵의 경계에 닿으면 카메라는 해당 방향으로 더 이상 이동하지 않는다.(프레임에 가둬진 느낌)

 

결과

 

 

 

스크립트
using UnityEngine;

public class CameraFollow : MonoBehaviour
{
    public Transform player;
    public float minX, maxX, minY, maxY;

    private float camWidth;
    private float camHeight;
    
    private void Start()
    {
        camHeight=Camera.main.orthographicSize;
        camWidth=camHeight*Camera.main.aspect;
    }
    
    void Update()
    {
        if(player==null) return;
        
        float x=Mathf.Clamp(player.position.x,minX+camWidth,maxX-camWidth);
        float y=Mathf.Clamp(player.position.y,minY+camHeight,maxY-camHeight);
        transform.position=new Vector3(x,y,-10f);
    }
}

 


 

 

밤산책

반응형