using UnityEngine;
public class Singleton<T> : MonoBehaviour where T : MonoBehaviour
{
public static T Instance { get; private set; }
protected virtual void Awake()
{
if (Instance == null)
{
Instance = this as T;
}
else if (Instance != this)
{
Destroy(gameObject);
}
}
}
Unity에서 싱글톤은 굳이 FindWithTag 뭐 이런걸로 새로 안 찾아도 된다.

Chapter 7 ~ 9
어댑터 패턴 : 인터페이스 바꿔치기. 형식 맞춰주기 위해 메서드를 택갈이한다.
퍼사드 패턴 : 여러 클래스 명령 묶은 메서드들 담은 클래스
템플릿 메소드 패턴 : 여러 메서드를 묶은 메서드 중에 일부는 추상 메서드로 둬서 서브 클래스에 따라 다르게 작동하도록 한다. 행동이 더 분화하면 hook라는 걸로 if문 분기 처리할 수도 있다. 추상 메소드 구현 일일이 해야해서 좀 번거로운 상황이 많이 나오긴 할듯.
반복자 패턴 : 여러 컬렉션 자료형에 접근할 때 hasnext(), next() 이런 걸로 추상화
컴포지트 패턴 : 트리 구조로 객체를 구성한다. 자식 있는 노드랑 없는 노드를 똑같이 다룬다. 필요하면 자식 순회하면서 자식 동작들 실행할 수도 있고, 자식 추가하거나 편집할 수도 있다. 자식에 아무 의미 없는 메소드 생길수도 있다.
FSM 구현함
public void Attack()
{
if (Time.time >= lastAttackTime + attackCooldown)
{
print("공격");
lastAttackTime = Time.time;
}
}
코루틴 안 쓰고도 간격 조절할 수 있다
