OasisW매뉴얼 English
섹션 9. 스크립팅

이벤트와 스크립트 간 통신

게임에서는 한 스크립트가 다른 스크립트에게 일을 알려야 할 때가 많습니다. 별을 먹은 스크립트가 점수 스크립트에게 알리고, 시간이 다 된 스크립트가 버튼을 보이게 하는 식입니다. 이 페이지는 그 세 가지 방법을 설명합니다.

아래 코드는 2026-10-29 Launch한 게임에서 같은 코드로 스크립트를 만들어 엔티티에 붙여 실행했습니다(각 1회). 스크립트 파일로 만드는 절차는 새 스크립트 만들고 붙이기와 같습니다.

세 가지 방법

방법쓰는 때장점과 단점
게임 전체 이벤트(this.app.fire·on)누가 받는지 몰라도 될 때. 점수, 게임 끝보내는 쪽이 받는 쪽을 몰라도 됩니다. 이벤트 이름을 잘못 쓰면 아무 일도 안 일어나고 오류도 없습니다
엔티티 이벤트(entity.fire·on)특정 엔티티에게만 알릴 때범위가 좁아 헷갈리지 않습니다. 받을 엔티티를 찾아야 합니다
직접 부르기(entity.script.이름.함수())상대가 정해져 있고 바로 결과가 필요할 때가장 단순합니다. 두 스크립트가 서로를 알아야 해서 고치기 어려워집니다

게임 전체 이벤트

보내는 쪽(별):

Star.prototype.initialize = function () {
    this.entity.collision.once('triggerenter', function (other) {
        this.app.fire('star:collected', 1);
        this.entity.enabled = false;
    }, this);
};

받는 쪽(점수):

Score.prototype.initialize = function () {
    this.score = 0;
    this.app.on('star:collected', this.onStar, this);
    this.on('destroy', function () {
        this.app.off('star:collected', this.onStar, this);
    }, this);
};

Score.prototype.onStar = function (amount) {
    this.score += amount;
    this.entity.element.text = '점수 ' + this.score;
};

실측에서 떨어지는 Box가 트리거 StarT를 지나자 점수가 1이 되고, Text의 글자가 점수 1로 바뀌고, StarT가 꺼졌습니다. 그 뒤 점수 스크립트를 지우고 같은 이벤트를 다시 보내자 점수가 그대로 1이었습니다. destroy에서 off로 연결을 푼 결과입니다.

  • 이벤트 이름은 문자열입니다. star:collected처럼 무엇:어떻게로 지으면 찾기 쉽습니다.
  • fire의 두 번째 값부터 받는 함수에 그대로 넘어갑니다.
  • this.app.on으로 연결했으면 엔티티가 지워질 때 off로 풉니다(스크립트 구조와 라이프사이클).
  • 점수 글자에 한글을 쓰면 글꼴에 그 글자가 있어야 합니다(점수·안내 글자 바꾸기).

엔티티 이벤트

엔티티도 같은 fire·on을 가집니다. 충돌 이벤트(collisionstart)와 버튼 이벤트(click)도 이 방식입니다. 실측에서 this.entity.collision.on('collisionstart', …)(충돌 이벤트 받기)과 this.entity.button.on('click', …)(버튼 만들기)은 실행해 확인했습니다.

var door = this.app.root.findByName('Door');
door.fire('open');

받는 쪽은 door.on('open', function () { … })로 받습니다. 실측에서 Plane에 on('open')을 걸고 fire('open')을 보내자 받았습니다.

다른 엔티티 찾기

방법코드메모
이름으로this.app.root.findByName('Ball')같은 이름이 여럿이면 처음 것 하나. Launch한 게임에서 실행해 확인했습니다
꼬리표로this.app.root.findByTag('star')목록을 돌려줍니다. 엔티티의 Tags에 꼬리표를 붙여 둡니다. 실측에서 star 꼬리표를 붙인 Box가 찾아졌습니다
속성으로 받기attributes.add('target', { type: 'entity' })에디터에서 끌어다 놓습니다. 이름이 바뀌어도 끊기지 않습니다

AI가 만든 게임에서는 엔티티 이름이 판마다 다를 수 있습니다. 이름으로 찾는 코드를 고칠 때는 HIERARCHY의 실제 이름과 맞는지 먼저 봅니다.

다음으로

원고 scripting/events.html