GML 비주얼 라이브러리에서 행동 적용하기
GML 비주얼 라이브러리에서 대부분의 행동에는 적용 방식을 설정하는 옵션이 있습니다. 이를 행동 범위(action scope)라고 하며, 여러 가지로 설정할 수 있습니다. 기본적으로는 행동 범위가 self로 설정되어 있습니다. 즉, 방 안에서 인스턴스가 생성되면, 그 인스턴스가 행동 코드를 실행합니다. 하지만, 모든 상황에서 이러한 기본 설정이 유용하지 않을 수 있으며, 다른 인스턴스나 모든 인스턴스에 영향을 주고자 할 때는 행동 범위를 변경해야 합니다.
행동 범위 옵션
다양한 행동 범위를 설정할 수 있으며, 아래에 각 범위의 설명을 정리하였습니다.
| 행동 범위 | 설명 |
|---|---|
| Self | 기본 범위로, 현재 인스턴스만 행동을 호출합니다. |
| Other | 주로 충돌 이벤트에서 사용되며, 충돌한 인스턴스의 핸들을 반환합니다. |
| All | 현재 방에 있는 모든 활성 인스턴스에 대해 행동을 실행합니다. |
| Object | 특정 오브젝트의 모든 인스턴스가 동시에 행동을 실행하도록 설정합니다. |
| Expression | 특정 인스턴스의 ID를 입력해 해당 인스턴스에만 행동을 적용합니다. |
사용 예제
1. Self 활용 예
현재 인스턴스만 움직이게 하려면 아래와 같이 사용합니다.
// 현재 인스턴스 위치를 오른쪽으로 이동
x += 5;
2. Other 활용 예
두 개의 인스턴스가 충돌했을 때, 다른 인스턴스의 체력을 감소시키는 예입니다.
if (place_meeting(x, y, obj_Player)) {
other.health -= 10; // 플레이어의 체력 감소
instance_destroy(); // 현재 인스턴스 파괴
}
3. All 활용 예
방의 모든 포탄 인스턴스를 제거하는 방법입니다.
// 방의 모든 인스턴스를 파괴
with (obj_Bullet) {
instance_destroy();
}
4. Object 활용 예
모든 적 인스턴스가 특정 방향으로 회전하도록 설정하는 코드입니다.
with (obj_Enemy) {
direction = 30; // 모든 적이 30도 방향으로 회전
}
5. Expression 활용 예
특정 인스턴스를 찾아 그 스프라이트를 변경하는 방법입니다.
var target_instance = instance_nearest(x, y, obj_Player);
if (target_instance != noone) {
target_instance.sprite_index = spr_Hit; // 찾아낸 인스턴스의 스프라이트 변경
}
이와 같이 행동 범위를 적절히 활용하면 다양한 기능을 구현할 수 있습니다. 각 범위를 이해하고 사용해보세요!