유니티 심화

절대강좌 유니티 - 라이트매핑 및 라이트 프로브, 씬 관리, 동기 비동기

다모아 2023. 8. 30. 12:34

Generate Lightmap UVs 옵션

 

Contribute GI 플래그

 

Ambient Occlusion - 어두운 곳은 더 어둡게

 

Lightmap Resolution - 라이트맵의 품질 설정


씬관리

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

public class UIManager : MonoBehaviour
{
    [SerializeField]
    private Button btnStart;
    [SerializeField]
    private Button btnOption;
    [SerializeField]
    private Button btnShop;

    private UnityAction action;

    private void Start()
    {
        this.action = () => this.OnStartClick();
        this.btnStart.onClick.AddListener(this.action);

        //this.btnStart.onClick.AddListener(() => {
        //    this.OnButtonClick(this.btnStart.name);
        //});

        this.btnOption.onClick.AddListener(() => {
            this.OnButtonClick(this.btnOption.name);
        });

        this.btnShop.onClick.AddListener(() => {
            this.OnButtonClick(this.btnShop.name);
        });

    }
    public void OnButtonClick(string msg)
    {
        Debug.Log($"Click Button : {msg}");
    }

    public void OnStartClick()
    {
        SceneManager.LoadScene("Level_01");
        SceneManager.LoadScene("Play", LoadSceneMode.Additive);
    }
}


 

SceneManager.LoadSceneAsync()

--> 인덱스로 씬 로드

동기

비동기

 

비동기 Init

주의 : Start보다 더 빠르게 호출됨


TitleMain

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

public class TitleMain : MonoBehaviour
{
    [SerializeField]
    private Button btn;
    public Action<string> onChangeScene;

    private void Awake()
    {
        Debug.Log("[TitleMain] Awake");
    }

    private void OnEnable()
    {
        Debug.Log("[TitleMain] OnEnable");
    }

    private void Start()
    {
        Debug.Log("[TitleMain] Start");
    }

    public void Init(string version)
    {
        Debug.Log("[TitleMain] <color=yellow>Init</color>");
        Debug.LogFormat("version: {0}", version);

        this.btn.onClick.AddListener(() => {
            this.onChangeScene("홍길동");
            //동기
            //SceneManager.LoadScene("GameScene");
        });
    }
}

 

AppMain

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

public class AppMain : MonoBehaviour
{
    private string version = "1.0";
    private void Awake()
    {
        DontDestroyOnLoad(this.gameObject);
    }

    // Start is called before the first frame update
    void Start()
    {
        //동기
        //SceneManager.LoadScene("Title");
        //TitleMain titleMain = GameObject.FindObjectOfType<TitleMain>();
        //Debug.Log(titleMain);

        //GameObject titleGo = GameObject.Find("TitleMain");
        //Debug.Log(titleGo);

        //titleMain.Init();
        //비동기
        AsyncOperation oper = SceneManager.LoadSceneAsync("TitleScene");
        oper.completed += OnLoadCompleteTitleScene;

    }

    private void OnLoadCompleteTitleScene(AsyncOperation obj)
    {
        Debug.Log("로드 완료");
        TitleMain titleMain = GameObject.FindObjectOfType<TitleMain>();
        titleMain.onChangeScene = (nickname) => {
            this.LoadGameScene(nickname);
        };
        Debug.LogFormat("titleMain: {0}", titleMain);
        titleMain.Init(this.version);
    }

    private void LoadGameScene(string nickname)
    {
        //비동기 로드
        AsyncOperation oper = SceneManager.LoadSceneAsync("GameScene");
        oper.completed += (obj) => {
            GameMain gameMain = GameObject.FindObjectOfType<GameMain>();
            gameMain.Init(nickname);
        };
        
    }
}

 

GameMain

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

public class GameMain : MonoBehaviour
{
    private void Awake()
    {
        Debug.Log("[GameMain] Awake");
    }

    private void OnEnable()
    {
        Debug.Log("[GameMain] OnEnable");
    }

    private void Start()
    {
        Debug.Log("[GameMain] Start");
    }

    public void Init(string nickname)
    {
        Debug.LogFormat("[GameMain] Init: {0}", nickname);
    }
}