카메라가 플레이어 따라다니게 하기 / InputField로 이름 입력받기 / Update문에서 계속 생성과 초기화 반복시 문제점

정제로·2023년 9월 6일
0

Unity

목록 보기
9/19

CameraManager

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

public class CameraManager : MonoBehaviour
{
    public Camera Camera;
    public GameObject player;

    Transform plTr;
    Transform camTr;

    void Awake()
    {
        plTr = player.transform;
        camTr = Camera.main.transform;
    }

    void Update()
    {
        CamFollowPlayer();
    }


    void CamFollowPlayer()
    {
        camTr.position = new Vector3(plTr.position.x, plTr.position.y, 
        							 camTr.position.z);
    }
}
  1. 먼저 카메라를 받아준다, 이후 플레이어를 받아주고,
    2D이므로,
    카메라의 포지션중 x,y값은 플레이어의 transform의 x,y값만 따라가고,
    z값은 카메라가 가지고 가면 된다.

나중에 cinemachine을 사용할수 있을때는 더 쉬워진다고 한다..
아직은 모르니... 갈!


InputField로 이름 입력받기

유저가 값을 입력하기 위해선, InputField를 사용해야한다.
하지만 InputField는 단순히 입력만 하는것이기에 따로 변수에 저장시켜줘야한다.

1. InputManager오브젝트를 만든다

이름은 상관없다, 그냥 아무 매니저 역할을 할 오브젝트만 만들자

이후 스크립트 작성

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using UnityEngine.SceneManagement;

public class InputManager : MonoBehaviour
{
    public TMP_InputField playerNameInput;

    public static string playerName;
    private bool isEnoughLongName = false;

    void InputName()
    {
        playerName = playerNameInput.text;
    }

    void CheckValidName()
    {
        InputName();

        if (1 < playerName.Length && playerName.Length < 11)
        {
            isEnoughLongName = true;
        }
    }

    public void OnClickChangeToMainScene()
    {
        CheckValidName();
        if (isEnoughLongName)
        {
            SceneManager.LoadScene("MainScene");
        }
    }
}

다른씬에서 불러오는것은, public static으로 playerName이 선언되어 있기에
InputManager.playerName으로 호출하면 값이 불러와진다!


Update문에서 계속 생성과 초기화 반복시 문제점

구조체는 값형이기에 문제가 없다.
하지만 클래스는 참조형이기에 생성과 초기화가 반복되면
예기치 않은 오류가 일어날 수도 있고,
클래스는 가비지컬렉터에 의해 제거가 되므로,
메모리 누수가 발생할 수 있다.

profile
초보자입니다.. 잘못된 정보, 달게 받겠습니다..

0개의 댓글