유니티

패스트캠퍼스 환급챌린지 10일차 : 한 번에 끝내는 유니티&C# 게임 개발 초격차 패키지 강의 후기

hokim 2025. 11. 21. 21:36

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://fastcampus.info/4oKQD6b

 

공부시작
공부종료
수강인증
학습 인증샷

 

와 기본 강의를 드디어 다 들었다...!!

너무 긴 여정이었다...

오늘은 Localization,로깅,인디케이터/프레임표시/타임스케일/resource, 에셋 번들에 대해 배웠다.

 

Localization

Localization은 나라별로 다른 언어로 보여주려고 할때 사용한다.

강의에서는 세가지 방법을 알려주었다.

  • csv로 데이터 작성 후 로딩해서 사용
  • csv → json으로 변경 후 이 json을 유니티에 넣어서 사용
  • csv → scriptable object로 변경해서 에셋에 옮겨담아 사용

1번만 실습하고 나머지는 하지 않았다.

현재 애플리케이션에 설정된 언어는 Application.systemLanguage 으로 알 수 있다.

 

강의에서 유저가 값을 변경하고 그를 저장하는 방법은 PlayerPrefs에 저장하는 것으로 알려주었는데, Application.systemLanguage를 바로 변경할 수는 없는건지 의문이 들어서 좀 찾아봤다.

 

근데 Application.systemLanguage는 사용자의 OS 환경에 설정된 언어를 가져오는 거라고 한다. 그리고 프로퍼티 자체가 read only여서 변경할 수 없다.  용도가 아예 다른거였다.

 

따라서 이 Application.systemLanguage는 기본용으로만 사용하고, 유저가 설정한 값은 간단하게 PlayerPrefs로 저장한다.

 

프레임 표시

유니티 GUI에 디버깅용 레이아웃을 추가할 수 있다.

OnGui라는 Monobehaviour 제공 함수에 style을 먹여주면 된다.

using UnityEngine;

public class FPSStats : MonoBehaviour
{
    void OnGUI()
    {
#if DEBUG
        Rect position = new Rect(300, 100, Screen.width, Screen.height);
        float fps = 1.0f / Time.deltaTime;
        float ms = Time.deltaTime * 1000f;
        string text = string.Format("{0:N1} FPS ({1:N1}ms)", fps, ms);

        GUIStyle style = new GUIStyle();
        style.fontSize = 26;
        style.normal.textColor = Color.white;
        GUI.Label(position, text, style);
#endif

    }
}

 

타임스케일

게임속 시간 흐름의 속도를 조정할 수 있다.

정지 Time.timeScale = 0;
0.5배속 Time.timeScale = 0.5f;
정상속도 Time.timeScale = 1;

 

코루틴도 이 영향을 받을 수 있다.

  • new WaitForSeconds(); ⇒ 타임스케일 영향 받음
  • new WaitForSecondsRealtime(); ⇒ 타임스케일 영향 안 받음

 

AssetBundle

 

리소스를 앱에 다 넣으면 용량이 너무 커지므로 용량을 줄이기 위해 리소스를 묶은 다음 인터넷에 업로드해서 내려받는 유니티의 리소스 버전 관리 방식방식이다.

 

resources 폴더에 넣으면 사용하지 않는 파일이어도 빌드로 묶을때 같이 들어가게된다. 그려면 불필요하게 용량이 늘어나고, 파일이 많아지면 관리가 어려워진다. 따라서 resources 폴더에 넣는건 지양하고 AssetBundle을 사용하는게 좋다.

 

에셋 번들을 빌드하는 방법은 https://docs.unity3d.com/kr/530/Manual/BuildingAssetBundles.html 를 보면 된다.

빌드는 직접 스크립트를 추가해서 해야하는데, 왜 자동으로 해주지 않는건지 좀 의문이긴 하다...

 

번들은 이렇게 불러온다.

    public IEnumerator LoadLocalAssetBundle()
    {
        AssetBundleCreateRequest assetBundleCreateRequest = AssetBundle.LoadFromFileAsync("Assets/AssetBundles/{bundleName}");
        yield return assetBundleCreateRequest;
        assetBundle = assetBundleCreateRequest.assetBundle;
        yield return assetBundleCreateRequest.assetBundle;
    }

Assets 밑에 필요한 폴더가 이미 생성되어있는 상태여야한다.

 

그리고 번들 내부의 리소스는 이렇게 불러온다.

public IEnumerator ResourcesLoad<T>(string name) where T : Object
{
    AssetBundleRequest assetBundleRequest = assetBundle.LoadAssetAsync(name);
    yield return assetBundleRequest;
    yield return assetBundleRequest.asset;
}

 

 

-

 

에셋번들이라는 개념을 처음 알았다! 당연히 Resources.Load로 리소스에서 꺼내쓰면 되는 줄 알았는데... 좋은걸 배운 것 같다!

진짜 공부할때 쫌 힘들었는데 배우는게 많아서 건너뛸 수 없는 강의였다... 이제 내일부터 드디어 실습으로 넘어간다!