레이어 스크립트 함수 설명
이 문서에서는 레이어에 스크립트 함수를 할당하고, 해당 레이어가 렌더링된 후에 호출되는 방법에 대해 설명합니다. 이 방법을 사용하면 각기 다른 드로우 이벤트가 끝난 후에 함수가 실행되므로, 어떤 이벤트가 렌더링되고 있는지 확인하고 코드에 맞게 조정하는 것이 중요합니다. 이를 위해 event_type과 event_number를 확인할 수 있습니다.
문법
layer_script_end(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);
이 최종 코드 블록은 스크립트를 레이어에 할당합니다.
활용 예제
- 게임 오브젝트의 셰이더 효과 적용
gml var lay_id = layer_get_id("GameLayer"); 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("UILayer"); layer_script_begin(ui_layer_id, layer_shader_start); layer_script_end(ui_layer_id, layer_shader_end); - 다양한 레이어에서 셰이더를 다르게 설정
gml var enemy_layer_id = layer_get_id("EnemyLayer"); layer_script_begin(enemy_layer_id, layer_shader_start); layer_script_end(enemy_layer_id, layer_shader_end); - 특정 조건에 따라 셰이더 변경
gml if (player_health < 50) { layer_script_begin(lay_id, layer_shader_start); } - 게임의 특정 이벤트에 따라 셰이더 적용
gml if (event_type == ev_draw && event_number == ev_draw_normal) { layer_script_begin(lay_id, layer_shader_start); }
이러한 예제들은 레이어 스크립트 함수를 활용하여 다양한 효과를 적용하는 방법을 보여줍니다.