[TIL] Unity - 카메라 이동 및 시간 표시 UI

MINO·2024년 5월 11일
0
post-thumbnail

2024-05-10


카메라 이동

이동하는 플레이어를 따라 움직이는 기능을 구현하고 싶었다.


자식으로 넣어주기

첫번째 시도한 방법은 플레이어 오브젝트 안에 Main Camera 를 넣어주는 것이었다.

스크립트나 설정 필요 없이 손쉬운 방법이다.


결과물

플레이어의 이동에 따라 카메라도 잘 움직이긴 한다.

하지만, 조금 더 부드러운 카메라 전환을 원해서 다른 방법을 찾아보았다.


스크립트를 활용한 카메라 이동 (1)

public class CameraMovement : MonoBehaviour
{
    public GameObject Target; // 카메라가 따라다닐 목표
    public float speed = 4.0f;
    public float z = 10f;

    Transform this_transform;
    Transform target_transform;

    void Start()
    {
        this_transform = GetComponent<Transform>();
        target_transform = Target.GetComponent<Transform>();
    }

    void Update()
    {
        this_transform.position = Vector2.Lerp(this_transform.position,target_transform.position,speed*Time.deltaTime);
        this_transform.Translate(0, 0, z);
    }
}

이전에 사용한 적이 있는 선형 보간 Lerp 함수를 사용하여 카메라가 플레이어를 따라 부드럽게 움직였지만, 생각보다 끊김과 버벅거림이 있었다.


원인 (?)

플레이어 이동을 담당하는 키 입력 받는 로직과 플레이어가 움직일 때, Idle 과 Walk 를 구분하는 isWalking 변수를 바꾸는 로직이 Update 함수에 존재한다.

Update 함수는 매 프레임마다 호출되고, 그 주기가 일정하기 않기 때문에 발생한다고 생각하였다.


결과

플레이어의 움직임을 담당하는 Update 함수가 아닌,
Update 함수가 모두 끝난 뒤 호출되는 LateUpdate 함수에 카메라 이동 로직을 넣어주었다.


시간 표시 UI

왼쪽 상단에 현재 시간을 표시하는 UI 를 만들어주었다.

Time_Canvas

시간은 유저가 보는 화면의 왼쪽 상단에 고정되어 있어야한다.

따라서, Render Mode 를 Screen Space - Camera 로 설정해주었다.

카메라가 보고 있는 화면에 고정적으로 띄워주기 때문에,
앞서 플레이어를 따라 이동하는 카메라의 왼쪽 상단에 표시된다.


스크립트

현재 시간을 받아와 Text 에 표시해주기만 하면 된다.

using System;
using UnityEngine.UI;

public class TimeUI : MonoBehaviour
{
    private Text timeTxt;

    private void Awake()
    {
        timeTxt = transform.GetComponent<Text>();
    }

    void Update()
    {
        timeTxt.text = NowTime();        
    }

    public static string NowTime()
    {
        return DateTime.Now.ToString("HH:mm");
    }
}

자세히 알아보자.

DateTime.Now

System 네임스페이스에서 제공하는 DateTime.Now 를 통해 현재 시간을 받아올 수 있다.

ToString 과 함께 아래의 형식을 사용해 원하는 방식으로 표시해주면 된다.

형식표시
yyyy년도
MM
dd
HH
mm
ss
tt오전, 오후

TIL 마무리

맵을 구현하다 실수로 타일을 잘못된 폴더에 저장을 해서 삭제했다가
노가다로 만든 타일맵이 2번이나 사라졌다.

시간이 매우 아깝지만, 타일맵을 활용해서 맵을 꾸밀 때 같은 실수를 반복하진 않을 것 같다.

profile
안녕하세요 게임 개발하는 MINO 입니다.

0개의 댓글