Unity/Unity 기초

Unity 강의 2일차 (2) - 빠르게 이동하는 물체 추적하기

하참이 2025. 1. 16. 18:35

본 강의는 다음 문서를 참고하여 제작하였습니다. 자세한 내용은 하단 링크를 참조하시거나 댓글로 질문 남겨주시면 성심성의껏 답변 드리겠습니다.

 

https://learn.unity.com/tutorial/1-3gang-bbareuge-idonghaneun-mulce-cujeoghagi?uv=2021.3&pathwayId=63ca4663edbc2a7be103183f&missionId=62ceb5c2edbc2a08dbf5f531&projectId=63c62efbedbc2a291fd6a62a#

 

1.3강 - 빠르게 이동하는 물체 추적하기 - Unity Learn

개요: 차량에서 눈을 떼지 마세요. 이 수업에서는 카메라에 대한 새로운 C# 스크립트를 코딩하여 카메라가 도로를 달리는 차량을 따라가고 플레이어가 씬을 제대로 볼 수 있도록 만들어 보겠습

learn.unity.com

 


 

 

2일차도 됬겠다 이제 감이 슬슬 잡힐 것 입니다. 서론없이 바로 본론으로 넘어가죠!

 

 

지난시간에 PlayerController의 스피드를 줄였던 것을 확인할 수 있었습니다. Vector3에 deltaTime을 곱하고, 상수 20을 곱했었지요. 하지만 이렇게 되면 속도를 변경할 수는 없을 것입니다. 이렇게 되면 현실감 있는 게임이랑은 거리가 멀어지지요.

 

그렇기에 우리는 변수를 사용할 것 입니다. PlayerController 코드를 다음과 같이 변경합니다.

 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float speed = 20;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        // Move the vehicle forward
        transform.Translate(Vector3.forward * Time.deltaTime * speed);
    }
}

 

 

추가 된 부분은 float speed가 추가되었고, Vector3 * deltaTime에 speed 변수를 곱하도록 변경했습니다.

 

이렇게 되면 프로그래밍으로 speed 값을 변경하여 게임 도중 속도를 변경 할 수 있을 것이고, public 으로 선언했기에 Unity Editor 에서도 속도 값을 변경 할 수 있을 것 입니다.

 

 

 

이제 다른 문제를 고쳐봅시다. 게임 뷰를 보면 처음엔 차가 움직이는데 차가 멀리 가면 장애물이 보이지도 않고, 차도 점점 작아져만 가고 매우 불편해집니다.

 

 

이 문제를 해결하기 위해선 어떻게 해야할까요? 카메라를 이동시키면 되겠지요. 우리는 카메라가 차를 따라가도록 해서 이 문제를 해결 할 것 입니다. 

 

Scripts 폴더에 새 스크립트 FollowPlayer를 생성합니다.

 

그리고 스크립트를 다음과 같이 작성합니다.

 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FollowPlayer : MonoBehaviour
{
    public GameObject player;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        transform.position = player.transform.position;
    }
}

 

 

 

 

 

보시면 GameObject player를 선언하고, Update에서 게임오브젝트의 포지션을 player의 포지션으로 설정합니다.

 

눈치가 빠른 학생이라면 이 스크립트 컴포넌트를 카메라에 붙이고, GameObject player 에는 Vehicle을 부여하면 카메라의 위치는 player를 따라가게 될 것이라 생각할 것입니다.

 

 

바로 해보죠! 이 스크립트 컴포넌트를 카메라에 부여합니다.

 

 

 

 

 

 

 

 

Follow Player에 Player라는 프로퍼티가 있는 것을 확인 할 수 있습니다. public으로 선언했으니 말이죠.

 

Player에다 Vehicle을 부여해줍니다.

 

 

 

 

 

 

 

이제 게임을 실행해봅니다.

 

 

 

 

 

 

네? Vehicle을 따라가기만 하니 차량의 중심에 카메라가 달렸네요. 바로 수정해보죠.

 

FollowPlayer함수를 다음과 같이 수정해줍니다.

 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FollowPlayer : MonoBehaviour
{
    public GameObject player;
    private Vector3 offset = new Vector3(0, 5, -7);

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        transform.position = player.transform.position + offset;
    }
}

 

 

 

 

Vector3 offset 변수를 선언해주고 player의 position에서 값을 늘려주도록 합니다. 여기서 중요한 점은 offset은 private로 선언했다는 것이겠네요. 이렇게 되면 Unity Editor에서 값을 변경할 수 없겠네요. (참고하셔야 할 점은 public과 private는 Unity Editor에서 보기만을 위한 기능이 아닙니다.)

 

 

게임을 실행해보겠습니다.

 

 

 

 

 

 

잘 따라가네요! 하지만 카메라가 너무 흔들립니다. 조금 더 자세하게 프로그래밍을 하기 위해서 Update 함수를 LateUpdate로 변경합시다.

 

왜 LateUpdate를 사용하면 흔들림이 줄어드는 것일까요? 왜냐하면 플레이어가 키보드를 입력하거나 다른 이벤트 처리가 실행이 되고 나서 카메라가 따라가는 것이 더 부드러운 처리가 가능해지기 때문입니다. 

 

 

 

 

 

 


 

좋습니다! 다음 시간에는 차량을 움직여보도록 하겠습니다.

 

수고하셨습니다!