
오늘 학습 키워드
오늘 학습 한 내용을 나만의 언어로 정리하기
팀 프로젝트
플레이어 구조 짜기

- 파사드 패턴으로 플레이어가 다 가지고 있도록 함
- 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();
}
}학습하며 겪었던 문제점 & 에러
-
문제&에러에 대한 정의
-
내가 한 시도
-
해결 방법
-
새롭게 알게 된 점
-
이 문제&에러를 다시 만나게 되었다면?