오늘 학습 키워드

오늘 학습 한 내용을 나만의 언어로 정리하기

팀 프로젝트

플레이어 구조 짜기

  • 파사드 패턴으로 플레이어가 다 가지고 있도록 함
  • Player Move : 이동, 점프, 회피
  • Player Attack : 몬스터에게 영향을 줄 수 있는 것들 (공격, 패링)
  • Player Condition : 체력, 스태미나 등 컨디션. 이벤트 버스 활용 예정
  • Player Skill : 플레이어의 스킬을 갈아 낄 수 있도록 확장성 있게 개발 예정

스탠다드 반 강의 (주제 : UGS)

  • 인증, 푸쉬, 클라우드 등등 여러 기능이 묶여져있음.
서비스 이름비용난이도
AWS저렴어려움
Firebase평균쉬움
뒤끝비쌈쉬움
스팀무료제한
UGS평균쉬움
public class GameManager : BaseManager
{
	protected override void Init()
	{
		Application.targetFrameRate = 60;
		
		base.Init();
	}
}
public enum Scenes
{
	Init,
	Intro,
	Game,
}
 
public calss SceneManagerEx : BaseManager
{
	public Scenes preScene = Scenes.Init;
	public Scenes curScene = Scenes.Init;
	
	public void ChangeScene(Scenes targetScene)
	{
		preScene = curScene;
		curScene = targetScene;
		SceneManager.LoadScene((int)targetScene)
	}
	
	
}
public class BaseUI : MonoBehaviour
{
	public bool init;
	
	protected virtual void Start()
	{
		init = true;
		Debug.Log($"Open UI : {GetType().Name}");
	}
	
	public virtual void Show()
	{
	
	}
	
	public virtual void Hide()
	{
	
	}
}
 
 
public class PopupUI : BaseUI
{
 
}
 
public class SceneUI : BaseUI
{
 
}
 
public class UIManager : BaseManager
{
	Dictionary<string, BaseUI> loadedUIs = new();
	
	public void Load<T>() where T : BaseUI
	{
		var loadUi = Core.Resource.Load<T>();
		loadedUIs.Add(typeof(T).Name, loadUi);
	}
	
	public void Show<T>() where T : BaseUI
	{
		var key = typeof(T).Name;
		
		if(!loadedUIs.ContainsKey(key))
		{
			Load<T>();
		}
		
		if(!loadedUIs[key].init)
			Object.Instantiate(loadedUIs[key]);
		
		loadedUIs[key].gameObject.SetActive(true);
	}
	
	public void Hide<T>() where T : BaseUI
	{
		loadedUIs[typeof(T).Name].gameObject.SetActive(false);
	}
	
	public void Clear()
	{
		
	}
}
public class ResourceManager : BaseManager
{
	public T Load<T>() where T : Object
	{
		return Resources.Load<T>(typeof(T).Name);
	}
}
public static class Core
{
	public static UIManager UI;
	public static GameManager Game;
	public static DataManager Data;
	public static SceneManagerEx Scene;
	public static ResourcesManager Resource;
	
	
	// 첫 번째 씬이 돌아가기 전에 돌아감
	[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
	static void InitializeSubsystemRegistration()
	{
		Init();
	}
	// BeforeScene, AfterScene도 있음
	
	[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
	static void InitializeAfterSceneLoad()
	{
	// 인트로 씬으로 강제 전환
		Scene.ChangeScene(Scenes.Intro);
	}
	
	
	static void Init()
	{
		UI = new UIManager();
		Game = new GameManager();
		Data = new DataManager();
		Scene = new SceneManager();
		Resource = ResourceManager();
	}
}

학습하며 겪었던 문제점 & 에러

  • 문제&에러에 대한 정의

  • 내가 한 시도

  • 해결 방법

  • 새롭게 알게 된 점

  • 이 문제&에러를 다시 만나게 되었다면?

내일 학습 할 것은 무엇인지