답변:
Tetrad의 답변을 확장하려면 다음과 같은 스크립트를 고려하십시오.
public class GameSystem : MonoBehavior
{
private GameSystem m_Instance;
public GameSystem Instance { get { return m_Instance; } }
void Awake()
{
m_Instance = this;
}
void OnDestroy()
{
m_Instance = null;
}
void Update()
{
// global game update logic goes here
}
void OnGui()
{
// common GUI code goes here
}
// etc.
}
그런 다음 장면의 루트에 "GameSystem"이라는 오브젝트를 만들 수 있습니다. 내장 변환 구성 요소는 구성 요소의 유일한 구성 요소입니다 (위치를 원점으로, 회전을 동일하게, 크기를 1로 설정하는 것은 중요하지 않지만 좋은 방법 임). GameSystem 컴포넌트를 해당 오브젝트에 연결했습니다.
이제 GameSystem.Instance.blah ()를 사용하여 글로벌 오브젝트에 액세스 할 수 있습니다. 이벤트 핸들러 메소드는 MonoBehavior에서 파생되고 컴포넌트로 존재하기 때문에 Unity에 의해 자동으로 호출됩니다. 다른 게임 오브젝트 또는 컴포넌트를 참조하는 필드를 추가하고 Unity 오브젝트 계층보기에서 연결할 수 있습니다.
예, 이것은 모두 약간 "이상합니다". 항상 글로벌 싱글 톤 인 객체 (변형도 포함)를 작성해야하는 것은 약간 더럽습니다. Unity가 업데이트 메시지를 받고 기본 Unity 속성 편집기를 사용하여 조작 할 수있는 전역 객체를 생성해야하는 것은 Unity입니다.