레이어 스크립트 시작 (layer_script_begin)
이 함수는 레이어에 스크립트 함수를 할당할 수 있게 해주며, 레이어가 렌더링되기 전에 호출됩니다. 레이어에 함수를 추가할 때, 이 함수는 다양한 드로우 이벤트의 시작에서 실행되므로, 현재 어떤 이벤트가 렌더링되고 있는지를 확인하고 코드에 맞게 조정할 필요가 있습니다. 이는 event_type과 event_number를 확인함으로써 가능합니다. 이 함수는 드로우 이벤트나 스텝 이벤트에서 호출될 의도가 아니라, 방의 시작에서만 호출되어야 합니다.
문법
layer_script_begin(layer_id, script);
인수
| 인수 이름 | 타입 | 설명 |
|---|---|---|
| layer_id | 문자열 또는 레이어 ID | 타겟 레이어의 핸들 (또는 문자열로 된 레이어 이름) |
| script | 스크립트 함수 | 레이어에 할당할 스크립트 함수 인덱스 |
반환값
N/A
확장 예제
이 확장 예제에서는 간단한 스크립트 함수가 어떻게 구조화되는지를 보여줍니다. 이 함수는 셰이더 유니폼 데이터를 설정하여 주어진 레이어가 그려질 때 이 함수가 실행되고 셰이더가 올바르게 작동하도록 합니다. 예제에서는 어떤 이벤트가 호출되고 있는지를 확인하여 나머지 함수가 특정 이벤트에서만 실행되도록 하는 방법을 보여줍니다. 이 경우, 메인 드로우 이벤트에서만 실행됩니다.
/// @function layer_shader_start();
function layer_shader_start() {
if (event_type == ev_draw) {
if (event_number == ev_draw_normal) {
colour_to_find = shader_get_uniform(sShaderDemo5, "f_Colour1");
colour_to_set = shader_get_uniform(sShaderDemo5, "f_Colour2");
shader_set(s_ColourChanger);
shader_set_uniform_f(colour_to_find, 1, 1, 1);
shader_set_uniform_f(colour_to_set, 1, 0, 0);
}
}
}
그림이 모두 완료된 후 셰이더를 리셋하는 동반 함수도 정의합니다.
/// @function layer_shader_end();
function layer_shader_end() {
if (event_type == ev_draw) {
if (event_number == ev_draw_normal) {
shader_reset();
}
}
}
이제 셰이더를 설정하기 위한 스크립트 함수를 정의했으므로, 레이어가 이들을 호출하도록 특정 레이어에 할당해야 합니다. 이는 방 생성 코드, 또는 어떤 컨트롤러 객체의 생성 이벤트 또는 방 시작 이벤트에서 수행됩니다. 이들은 매 스텝마다 설정할 필요는 없으며, 방의 시작 시 또는 레이어가 처음 생성될 때 한 번만 설정하면 됩니다.
var lay_id = layer_get_id("Instances");
layer_script_begin(lay_id, layer_shader_start);
layer_script_end(lay_id, layer_shader_end);
이 마지막 코드 블록은 스크립트를 레이어에 할당합니다.
활용 예제
- 게임 내 UI 레이어에 스크립트 추가하기
gml var ui_layer_id = layer_get_id("UI"); layer_script_begin(ui_layer_id, ui_update); layer_script_end(ui_layer_id, ui_reset); - 특정 이벤트에 따라 레이어 색상 변경하기
gml function change_layer_color() { if (event_type == ev_draw) { // 색상 변경 로직 } } - 애니메이션 효과 적용하기
gml function apply_animation_effect() { if (event_type == ev_draw) { // 애니메이션 효과 로직 } } - 게임 오버 시 레이어 비활성화하기
gml function disable_layer_on_game_over() { if (game_over) { layer_set_visible(layer_id, false); } } - 레벨 변경 시 레이어 업데이트하기
gml function update_layer_on_level_change() { if (level_changed) { // 레이어 업데이트 로직 } }