배울 내용#
작은 BASIC 프로그램을 작성하고, 프로그램이 분명히 정상 작동하는데도 Scene Graph가 비어 있는 모습을 지켜본 다음, 각 오브젝트에 이름을 붙여 나타나게 만듭니다. 끝까지 마치면 트리가 프로그램이 만든 대부분의 것을 왜 숨기는지, 그리고 무엇을 보여줄지 어떻게 선택하는지 알게 됩니다.
시작하기 전에#
- Engine은 후원이 필요한 모듈입니다. Inkwell, Vectra, PDF Studio가 무료인 세 모듈입니다.
- 이전 튜토리얼은 필요하지 않습니다. 아래 내용은 모두 하나의 스크립트로 이루어집니다.
- 뷰포트 옆에 Scene Graph 패널을 열어두세요. 이것이 이 연습의 핵심입니다.
단계#
-
Engine을 열고, 빈 씬을 시작한 다음, 스크립트 에디터를 엽니다. 다음을 붙여넣고 Play를 누르세요:
image = LoadImage("hero.png") sprite = CreateSprite(image) SpritePosition(sprite, 100.0, 120.0) CreatePointLight(1, 0.0, 5.0, 0.0, 10.0, 255, 255, 255) DO Sync() LOOP -
Scene Graph를 보세요. 스프라이트는 화면에 있고, 라이트는 켜져 있는데, 트리에는 아무것도 표시되지 않습니다. 이것은 버그가 아니며, 바로 이것이 이 수업 전체의 핵심입니다.
Tip: 패널은 이름 없는 오브젝트의 개수를 표시합니다. 그 숫자는 트리가 의도적으로 나열하지 않은, 여러분 프로그램의 산출물입니다.
-
스프라이트에 이름을 붙입니다.
SpritePosition다음에 한 줄을 추가하고 다시 Play를 누르세요:SpriteName(sprite, "player")player가 트리에 나타납니다. 화면에서는 그 외에 아무것도 바뀌지 않았습니다: 이름 붙이기는 아무것도 생성하거나 이동시키거나 그리지 않습니다. 그저 알릴 뿐입니다. -
이 개념과 함께 만들어진 명령으로 라이트에도 이름을 붙입니다:
LightName(1, "sun")이제 항목이 두 개가 되었습니다. 하나를 클릭해 보세요: 손으로 직접 배치한 오브젝트에서와 정확히 똑같이 인스펙터가 그 오브젝트를 따라갑니다.
-
파티클을 추가하고 이름을 붙여, 이 규칙이 스프라이트만의 것이 아님을 확인하세요:
CreateParticles(1, 200.0, 200.0) ParticlesName(1, "smoke") -
이제 세 개의 이름 붙이기 줄을 지우고 Play를 누릅니다. 씬은 동일하지만 트리는 다시 비어 있고, 이름 없는 개수는 다시 3으로 돌아갑니다.
Warning: 이름은 id가 아닙니다.
SpriteName(sprite, "player")는sprite에 담긴 id를 가진 스프라이트에 라벨을 붙일 뿐이며, 나중에 그 라벨로 오브젝트를 찾을 수 있게 해주지는 않습니다. 여전히 여러분이 다루는 핸들은 id입니다.
결과#
프로그램이 무엇을 보여줄지는 여러분이 결정할 수 있습니다. prop, 라이트, 이미터는 여러분이 선택한 이름으로 나타나고, 실제 프로그램이 만들어내는 수백 개의 기술적인 오브젝트는 방해되지 않게 비켜나 있습니다.
이 규칙이 존재하는 이유#
전형적인 BASIC 프로그램은 끊임없이 오브젝트를 만듭니다: 총알마다 스프라이트 하나, 점수 자릿수마다 텍스트 하나, 타일마다 이미지 하나씩입니다. 이것들을 전부 나열한다면 Scene Graph는 몇 초 안에 읽을 수 없는 상태가 될 것이고, 실제로 신경 써야 할 세 개의 오브젝트는 그 소음 속에 묻혀버릴 것입니다.
그래서 트리는 모든 것을 보여주고 나머지를 추측으로 숨기는 방식을 쓰지 않습니다. 트리는 여러분이 이름 붙인 것을 보여주고, 나머지는 아무것도 조용히 사라지지 않도록 개수만 셉니다. 그 필터는 엔진의 것이 아니라 여러분의 것입니다.
이름을 붙일 수 있는 오브젝트#
| 명령 | 이름을 붙이는 대상 |
|---|---|
SpriteName(id, name) | 스프라이트 |
TextName(id, name) | 텍스트 오브젝트 |
ObjectName(id, name) | 3D 오브젝트 |
LightName(id, name) | 포인트 라이트 또는 디렉셔널 라이트 |
ParticlesName(id, name) | 파티클 이미터(2D 또는 3D) |
사운드, 이미지, memblock, 폰트는 Scene Graph에 항목이 없습니다: 이것들은 씬 오브젝트가 아니라 리소스이며, 이름을 붙여도 어디에도 아무것도 표시되지 않습니다.