240129-TIL

2024. 1. 29. 20:59내일배움캠프

1월 29일

지금은 팀프로젝트 진행중이다.

 

우리 팀은 똥피하기 게임을 만들기로 했고

 

똥을 피하는건 더럽고 재미없으니깐 차라리 피하지말고 

 

물을 받아서 당근을 키우는 게임을 만들자! 라고 똥피하기 게임을 재해석 해서 만드는 중이다.

 

작업이 착착 잘 진행되어가고 있는데 StartScene -> GameScene -> StartScene으로 돌아가는

 

씬 전환 로직이 있는데 이때 데이터를 전달할 수 있는 방법이 필요했고

 

오늘은 그걸 학습하고 팀 프로젝트에 녹여내는 중이다.

 

기본적으로 씬 전환의 기본 개념을 알아보자

Scene

더보기

유니티에서 Scene이란 게임의 다양한 환경, 레벨 또는 화면을 나타낸다.

 

씬 전환이란 게임 내에서 다른 씬으로 넘어가는 과정을 의미하고 이 과정에서

 

데이터를 유지하거나 전달하는 것이 중요하다.

 

씬 전환에서 데이터를 전달하는 방법은 여러가지가 있다.

 

하지만 기본적으로 많이 사용하는 싱글턴, 정적 변수 사용, DontDestroyOnload, PlayerPrefs 이 4가지 방법을 정리해보자.

 

Singleton

더보기

싱글턴 패턴을 사용하는 방법이다.

 

게임 전반에 걸쳐 단일 인스턴스를 유지하며 데이터를 전달하는 방법이고

 

중요한 데이터를 중앙화하여 관리할 때 유용한 방법이다.

 

싱글턴 객체는 씬 전환시 파괴되지 않으므로 데이터가 유지된다. 하지만 싱글턴의 과도한 사용은

 

코드의 결합도를 높일수 있기 때문에 주의가 필요하다.

 

ex)

public static GameManager Instance;

    private void Awake()
    {
        if (Instance == null)
        {
            Instance = this;
            DontDestroyOnLoad(gameObject);
        }
        else if (Instance != this)
        {
            Destroy(gameObject);
        }
    }

 

싱글턴으로 만드는 방법은 여러 방법이 있고 사람에 따라 스타일이 달라지지만 대표적인 예시 코드를 들고와봤다.

 

Static 변수를 이용한 데이터 전달

더보기

Static 변수 즉 정적 변수를 사용하여 데이터를 저장하고 씬 간에 전달하는 방법도 있다.

 

굉장히 손쉽고 직관적으로 씬간 데이터를 주고 받을수 있는 방법이지만 정적 변수는 프로그램이 종료될때까지

 

계속 메모리에 남아있어야 하기 때문에 메모리 관리에 주의가 필요하다. 

 

public static class Data
{
	public static int data;
}

 

DontDestroyOnload

더보기

DontDestroyOnload 메소드를 사용하면 해당 오브젝트를 씬 전환 시에도 파괴되지 않도록 하는 방법이다.

 

특정 오브젝트와 그 속성들을 게임의 모든 씬에서 유지하고 싶을 때 적합하다.

public class Data : MonoBehaviour
{
	private void Awake()
    {
    	DontDestroyOnLoad(gameObject);
    }
    
    public int data;
}

 

 

PlayerPrefs

더보기

PlayerPrefs는 간단한 데이터를 저장하고 불러오는데 사용되는 유니티의 API이다. 

 

설정, 소교무 데이터의 저장에 적합하고 씬 전환 후에도 데이터를 유지할 수 있지만

 

보안이 중요한 데이터에는 적합하지 않으며, 데이터 크기에 제한이 있다.

 

public class Data : MonoBeHaviour
{
	public void SaveData(int score)
    {
    	PlayerPrefs.SetInt("Data", score);
    }
    
    public int LoadData()
    {
    	return PlayerPrefs.GetInt("Data");
    }
}

 

오늘은 씬 전환시 데이터를 전달하는 대표적인 4가지 방법에 대해서 알아보았다.

 

씬 간 데이터를 전달할 때는 데이터 유형 및 크기, 성능, 최적화, 보안 등등 여러 상황을 고려해야 한다.

 

음... 무슨 느낌을 받았냐면 여기선 배열을 쓸까? 리스트를 쓸까? 연결 리스트를 쓸까? 이런 느낌이라고 해야하나?

 

좀더 경험하고 더 많은 코드를 보면서 아 이럴땐 이런 방식으로 전달하는게 효과적이구나 저럴땐 저렇게 하는구나

 

많이 느끼고 배워야겠다.

 

팀 프로젝트를 진행할때마다 느끼는거지만 나랑 같은 작업을 하지만 나와 다른 생각 다른 코드들이 4개씩이나

 

더 나온다는 것이다. 그 코드를 보면서 내 코드와 비교하고 어떤 부분이 더 좋고 부족한지

 

비교할 수 있는게 너무 좋은것 같다.

 

1월 29일 TIL은 여기서 마치도록 하겠다.

 

'내일배움캠프' 카테고리의 다른 글

240131-TIL  (0) 2024.01.31
240130-TIL  (0) 2024.01.30
240126-TIL  (0) 2024.01.26
240125-TIL  (0) 2024.01.25
240124-TIL  (0) 2024.01.24