오늘은 본격적으로 개인과제작업을 시작하기 전에
미뤄왔던 델리게이트 공부를 해봤다.
시간이 날 때마다 베이직반 특강을 종종 챙겨봤었는데,
딱 이번에 들어야 할 주차 내용이 델리게이트 관련이라
오늘은 델리게이트 공부할 운명이구나.. 를 제대로 느꼈다.
[NOTE] 싱글톤, 델리게이트, 정보저장
데이터 동기화 를 위해서는
싱글톤
/ 델리게이트
/ 정보저장
(PlayerPrefs, SO, Json(실무에서 제일 많이 쓰임), csv(타일맵그릴때))싱글톤
public class GameManager : MonoBehaviour
private static GameManager _instance;
public static GameManager Instance // 나중에 이 부분을 상속받아 오는 형식으로 구현하면 더더욱 좋겠죠 ~?
{
get
{
if (_instance == null)
{
GameObject go = new GameObject("GameManager");
go.AddComponent<GameManager>();
_instance = go.GetComponent<GameManager>();
DontDestroyOnLoad(go);
}
return _instance;
}
set
{
if (_instance == null) _instance = value;
}
}
private void Awake()
{
if(_instance == null)
{
_instance = this;
DontDestroyOnLoad(this); // 게임Scene 이동할 때 GameManager 파괴되면 안 되니까 ~
}
else
{
if (_istance != this) Destroy(this);
}
}
델리게이트
delegate 가 Action 이다 ~!
public event Action action;
+= 로 구독시켜주기
미리 외부에 있는 함수가 싱글톤 쪽에 구독을 해놓고 특정한 상황일 때 발생시키면 된다.
public delegate void TestDelegate();
public TestDelegate characterUpdate;
public Action action;
// 매개변수가 필요하다면 public Action<int> action; 이런식으로 작성하면 된다.
Action
은 반환값이 없다. Func
은 반환값이 있다.
델리게이트를 통해서 함수를 넣어놓고 그걸 한꺼번에 불러줄 수 있다 ~!
e.g.
void CharacterUpdate()
{
Character.Manager.Instance.action?.Invoke();
}
바깥에서 등록해서 내부에서 호출하는 건 event
가 붙는다.
e.g.
public event Action action;
public event Action<int> score;
아직 Action 과 event Action 차이를 잘 모르게씀 ~
유니티에서 사용할 수 있는 델리게이트의 종류는 다음과 같다.
public Action action; // // 반환값 x, 매개변수 x
public Action<int> action2; // 반환값 x, 매개변수 int 하나
public Func<int, int, bool> func; // 반환값 bool, 매개변수 int 두 개
public Func<bool> func2; // 반환값 bool, 매개변수 x
'데이터 변화'와 '데이터 읽어옴' 사이의 브릿지 역할은 Scriptable Objects ~
델리게이트 개념 정리 : 메서드 넣을 수 있다, 반환값 없으면 Action 있으면 Func .
정보저장
to be continued.. maybe...?