노드를 모든 용도로 사용하는 것을 피하는 시기와 방법

노드는 생산하기 저렴하지만 한계가 있습니다. 한 프로젝트는 모든 작업을 하는 수 만 개의 노드로 이루어질 수 있습니다. 행동이 더 복잡할 수록, 프로젝트 성능에 추가하는 각 변형은 더 커집니다.

Godot는 노드가 사용하는 API를 만들기 위한 더 가벼운 객체를 제공합니다. 어떻게 프로젝트의 기능을 만들고 싶은 지를 설계할 때 옵션으로 다음을 명심하세요.

  1. 객체: 궁극의 경량 객체로, 오리지널 객체는 수동으로 메모리 관리를 하는데 사용해야 합니다. 말인 즉슨, 자체 커스텀 데이터 구조를 만드는 것이 그리 어렵지 않습니다, 심지어 커스텀 노드 구조도 만들 수 있는데 노드클래스보다 가볍죠.

    • 예시: Tree 노드를 참고하세요. 이 노드는 임의의 수의 행과 열이 있는 콘텐츠 테이블의 하이 레벨 맞춤 설정을 제공합니다. 시각화에 사용하는 데이터는 사실 TreeItem 객체들의 트리입니다.
    • 이점: API를 더 작은 유효 범위의 객체로 단순화하여 접근성과 반복 시간을 향상시켜 줍니다. 전체 노드 라이브러리에서 작업하는 대신, 한 노드가 적절한 하위 노드를 생성하고 관리할 수 있는 단축된 객체들의 집합을 만듭니다.

    주석

    객체들을 다룰 때는 조심해야 합니다. 객체를 변수 안에 저장할 수 있지만, 객체의 참조는 경고 없이 올바르지 않게 될 수 있습니다. 예를 들어 객체의 생성자가 객체를 아무 곳에도 삭제하지 않기로 결정하면, 다음에 객체에 접근하려 하면 오류 상태가 발동합니다.

  2. 참조: 객체보다 오직 조금 더 복잡함. 참조는 자신을 참조하는 지를 추적해서 더 이상 참조하지 않으면 불러온 메모리를 삭제합니다. 이는 데이터가 필요한 커스텀 클래스에 있어 대부분의 경우에 유용합니다.

    • 예시: File 객체를 참고하세요. 이것은 자기 자신을 삭제할 필요가 없다는 것 빼면 보통 객체처럼 작동합니다.
    • 이점: 객체와 같음.
  3. 리소스: 참조보다 오직 조금 더 복잡함. 리소스는 그들의 객체 속성을 Godot 리소스 파일로 직렬화, 혹은 그 반대로 비직렬화하는데 타고났습니다 (예를 들어, 저장 및 불러오기).

    • 예시: 스크립트, PackedScene (씬 파일 용), 그리고 각 AudioEffect 클래스와 같은 다른 타입들. 각각은 저장되고 불러와 질 수 있습니다. 따라서 이들은 리소스에서 분화된 것들입니다.
    • 이점: 기본의 데이터 저장 방법보다 리소스가 갖는 이점 대부분은 이미 말했습니다. 노드를 통한 리소스 사용의 관점에서, 주요 이점은 인스펙터 호환성에 있습니다. 객체/참조처럼 가벼우면서도, 리소스는 인스펙터에서 볼 수 있고, 속성을 내보낼 수 있습니다. 이를 통해 사용성 측면에서 하위 노드와 같은 목적을 달성할 수 있으면서도, 씬에 그러한 리소스/노드를 갖게 한다면 성능을 향상시킬 수 있습니다.