Unity에서 글로벌 스크립트를 첨부 할 위치는?


14

Unity에서 아는 한 모든 스크립트는 오브젝트에 첨부되어야합니다. 그러나 글로벌 스크립트의 경우는 무엇입니까? 예를 들어 테트리스와 같은 게임에서 요소 스폰 및 무버 스크립트를 어떤 오브젝트에 첨부해야합니까? 아니면 요소가 스스로 이동을 처리해야합니까? 이 문제에 대한 모범 사례가 있습니까?

답변:


14

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입니다.


이 답변에 감사드립니다. 나는 그것이 이상한 느낌에 동의합니다! 이 측면에 대한 정보가 거의 없다고 생각합니다. 이러한 '관리자'유형 수업에 가장 잘 접근하는 방법에 대한 독서 자료를 추천 해 주시겠습니까?
UpTheCreek

@UpTheCreek : 나는 정말로 모른다. 우리는 대부분 몇 년 전에 모든 일을 파악했지만, 현재 프로젝트는 맞춤형 기술을 사용하고 있기 때문에 요즘 Unity 모범 사례를 사용하면 구식입니다. 죄송합니다.
Sean Middleditch

3

해당 스크립트를 넣을 관리자 객체를 만드십시오. 할당 한 스크립트에 대해 정적 변수를 만들어 Awake전역에 쉽게 액세스 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.