Resources
유니티에서 사용하는 특수한 폴더이름이다.
해당 프로젝트에 있는 Resources라는 폴더에 있는 에셋을 탐색하여 로드할 수 있다.
Resources.Load("path");
해당 작업은 동기로 진행되어 병목이 걸릴 수 있다.
이를 비동기로 처리하는 방법도 있다.
단, 이러한 방식은 오래된 방식이다.
개선된 방법으로는 Addressable Asset을 사용하는 것이다.
https://wolstar.tistory.com/14
Singleton 패턴
다양한 곳에서 참조하며 단 하나만 존재하는 객체를 만드는 패턴이다.
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public interface ISingleton
{
void OnAwake();
}
public abstract class Singleton<T> : MonoBehaviour, ISingleton where T: MonoBehaviour
{
private static T instance;
public static T Instance
{
get
{
if (!instance)
{
}
return instance;
}
}
private void Awake()
{
if (instance == null)
{
instance = this as T;
}
OnAwake();
}
public abstract void OnAwake();
}
static을 이용해 실제 객체가 없더라도 접근할 수 있도록 만드는 것이 일반적이다.
또한, property를 통해 접근 제어를 한다.
그리고 Awake에서 instance를 생성한다.
이 클래스는 Singleton 패턴을 사용하는 객체의 부모 클래스가 된다.
만약, 이를 상속받은 어떤 클래스가 Awake를 재정의하게 되면 instance에 대한 할당이 제대로 이루어지지 않을 확률이 있다.
따라서, Awake를 자식 클래스에서 사용하지 않도록 방지해야 한다.
하지만, Awake를 유니티 이벤트 함수이기 때문에 재정의를 방지할 수 없기 때문에 OnAwake라는 abstract함수를 선언하여 자식 클래스에서 강제적으로 구현하도록 만들어 놓는 것이 좋아 보인다.
자식 클래스에서 강제적으로 OnAwake를 구현해야 하므로 Awake함수를 사용하지 않도록 상기시킬 수 있기 때문이다.
Serialized Dictionary
Unity의 Dictionary는 에디터에서 편집이 불가능하다.
아무리 Serializable을 사용하더라도 불가능하다.
이를 지원하는 라이브러리가 있다.
https://assetstore.unity.com/packages/tools/utilities/serialized-dictionary-243052