유니티 매니저

2024. 4. 5. 22:21Unity/스크립트 기본

1. 게임 매니저(Game Manager)

  • 게임의 전반적인 상태를 관리합니다. 예를 들어, 게임의 시작, 종료, 일시정지, 재시작 등의 상태를 제어하고, 게임 오버와 승리 조건을 체크합니다.
using UnityEngine;

public class GameManager : MonoBehaviour
{
    public static GameManager instance;

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

    public void StartGame()
    {
        // 게임 시작 로직
    }

    public void EndGame()
    {
        // 게임 종료 로직
    }

    public void PauseGame()
    {
        // 게임 일시정지 로직
    }

    public void ResumeGame()
    {
        // 게임 재개 로직
    }
}

2. UI 매니저(UI Manager)

  • 사용자 인터페이스(UI) 요소들의 상태와 표시를 관리합니다. 예를 들어, 점수판, 게임 오버 화면, 메뉴, 설정 창 등을 제어합니다. 
using UnityEngine;

public class UIManager : MonoBehaviour
{
    public static UIManager instance;

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

    public void UpdateScoreDisplay(int score)
    {
        // 점수 표시 업데이트
    }

    public void ShowGameOverScreen()
    {
        // 게임 오버 화면 표시
    }

    public void ShowPauseMenu()
    {
        // 일시정지 메뉴 표시
    }
}

3. 레벨 매니저(Level Manager)

  • 게임 내의 레벨이나 스테이지의 로딩과 전환을 관리합니다. 다양한 레벨 간의 이동이나 레벨 내의 특정 이벤트를 관리하는 데 사용됩니다.
using UnityEngine;
using UnityEngine.SceneManagement;

public class LevelManager : MonoBehaviour
{
    public static LevelManager instance;

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

    public void LoadLevel(string levelName)
    {
        SceneManager.LoadScene(levelName);
    }

    public void ReloadCurrentLevel()
    {
        Scene currentScene = SceneManager.GetActiveScene();
        SceneManager.LoadScene(currentScene.name);
    }

    public void LoadNextLevel()
    {
        // 다음 레벨 로드 로직
    }
}

4. 인벤토리 매니저(Inventory Manager)

  • 플레이어의 인벤토리 시스템을 관리합니다. 아이템 획득, 사용, 버리기 등의 인벤토리 내 작업을 처리합니다.
using System.Collections.Generic;
using UnityEngine;

public class InventoryManager : MonoBehaviour
{
    public static InventoryManager instance;
    private List<Item> inventory = new List<Item>();

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

    public void AddItem(Item item)
    {
        inventory.Add(item);
        // 아이템 추가 로직
    }

    public void RemoveItem(Item item)
    {
        inventory.Remove(item);
        // 아이템 제거 로직
    }

    public void UseItem(Item item)
    {
        // 아이템 사용 로직
    }
}

5. 자원 매니저(Resource Manager)

  • 게임 내에서 사용되는 리소스(텍스처, 모델, 오디오 클립 등)의 로딩과 언로딩

을 관리합니다. 메모리 사용을 최적화하고, 필요할 때 리소스를 동적으로 로드하는 기능을 담당합니다.

using UnityEngine;

public class ResourceManager : MonoBehaviour
{
    public static ResourceManager instance;

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

    public GameObject LoadResource(string path)
    {
        return Resources.Load<GameObject>(path);
    }
}

6. 이벤트 매니저(Event Manager)

  • 게임 내에서 발생하는 이벤트들을 관리하고, 이벤트 리스너들 사이의 메시지 전달을 담당합니다. 이를 통해 게임 오브젝트 간의 결합도를 낮출 수 있습니다.
using UnityEngine;
using UnityEngine.Events;
using System.Collections.Generic;

public class EventManager : MonoBehaviour
{
    private Dictionary<string, UnityEvent> eventDictionary = new Dictionary<string, UnityEvent>();

    public static EventManager instance;

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

    public void StartListening(string eventName, UnityAction listener)
    {
        UnityEvent thisEvent = null;
        if (instance.eventDictionary.TryGetValue(eventName, out thisEvent))
        {
            thisEvent.AddListener(listener);
        }
        else
        {
            thisEvent = new UnityEvent();
            thisEvent.AddListener(listener);
            instance.eventDictionary.Add(eventName, thisEvent);
        }
    }

    public void StopListening(string eventName, UnityAction listener)
    {
        if (instance == null) return;
        UnityEvent thisEvent = null;
        if (instance.eventDictionary.TryGetValue(eventName, out thisEvent))
        {
            thisEvent.RemoveListener(listener);
        }
    }

    public void TriggerEvent(string eventName)
    {
        UnityEvent thisEvent = null;
        if (instance.eventDictionary.TryGetValue(eventName, out thisEvent))
        {
            thisEvent.Invoke();
        }
    }
}

7. 세이브/로드 매니저(Save/Load Manager)

  • 게임의 진행 상황을 저장하고 불러오는 기능을 관리합니다. 플레이어의 위치, 점수, 인벤토리 상태 등 게임의 상태를 파일이나 클라우드에 저장하고, 필요할 때 이를 불러옵니다.
using UnityEngine;

[System.Serializable]
class GameData
{
    public int playerScore;
    // 여기에 게임 데이터 추가
}

public class SaveLoadManager : MonoBehaviour
{
    public static SaveLoadManager instance;

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

    public void SaveGame()
    {
        GameData data = new GameData();
        // 데이터 설정

        string json = JsonUtility.ToJson(data);
        PlayerPrefs.SetString("GameData", json);
    }

    public void LoadGame()
    {
        string json = PlayerPrefs.GetString("GameData");
        GameData data = JsonUtility.FromJson<GameData>(json);
        // 데이터 로드
    }
}

8. 플레이어 매니저(Player Manager)

  • 플레이어 캐릭터의 상태와 행동을 관리합니다. 생명력, 에너지, 스킬, 능력치 등 플레이어와 관련된 데이터를 관리합니다.
using UnityEngine;

public class PlayerManager : MonoBehaviour
{
    public static PlayerManager instance;

    public float health = 100f;
    public float energy = 100f;
    // 추가 플레이어 상태 변수

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

    public void TakeDamage(float amount)
    {
        health -= amount;
        if (health <= 0f)
        {
            Die();
        }
    }

    private void Die()
    {
        // 플레이어 사망 로직
    }

    public void RestoreHealth(float amount)
    {
        health += amount;
        // 건강 상태 복구 로직
    }

    // 추가 플레이어 관리 기능
}

9. AI 매니저(AI Manager)

  • 인공지능 캐릭터들의 행동을 관리합니다. 적 AI의 행동 패턴, 경로 찾기, 상태 머신 등을 담당합니다.
using UnityEngine;
using System.Collections.Generic;

public class AIManager : MonoBehaviour
{
    public static AIManager instance;

    public List<EnemyAI> enemies = new List<EnemyAI>();

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

    public void RegisterEnemy(EnemyAI enemy)
    {
        if (!enemies.Contains(enemy))
        {
            enemies.Add(enemy);
        }
    }

    public void UnregisterEnemy(EnemyAI enemy)
    {
        if (enemies.Contains(enemy))
        {
            enemies.Remove(enemy);
        }
    }

    // AI 업데이트 및 관리 로직
}

10. 네트워크 매니저(Network Manager)

  • 멀티플레이어 게임의 경우, 네트워크 통신을 관리합니다. 플레이어 간의 데이터 동기화, 서버 연결, 데이터 전송 등을 담당합니다.
using UnityEngine;
using UnityEngine.Networking;

public class NetworkManager : MonoBehaviour
{
    public static NetworkManager instance;

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

    public void ConnectToServer()
    {
        // 서버 연결 로직
    }

    public void DisconnectFromServer()
    {
        // 서버 연결 해제 로직
    }

    // 네트워크 데이터 전송 및 수신 로직
}
728x90

'Unity > 스크립트 기본' 카테고리의 다른 글

BoxCast  (0) 2023.02.21
오브젝트 풀링  (0) 2023.01.26
메모리 관리  (0) 2022.06.27
애니메이터  (0) 2022.06.16
파일 불러오기  (0) 2022.06.16