유니티 매니저
2024. 4. 5. 22:21ㆍUnity/스크립트 기본
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