OasisW매뉴얼 English
섹션 9. 스크립팅 방법 작성 대기 3

키보드·마우스·터치 입력

스크립트에서 키보드·마우스·터치 입력을 받는 방법을 설명합니다. 입력은 this.app.keyboard, this.app.mouse, this.app.touch로 받습니다.

2026-10-29 oasisw.ai에서 새 프로젝트를 Launch해 확인한 바로는, 데스크톱 Chrome에서 this.app.keyboard와 this.app.mouse는 있었고 this.app.touch는 비어 있었습니다(null). 터치 화면이 없는 기기에서는 터치 입력이 없습니다.

키보드·마우스 예제는 같은 날 Launch한 게임에서 같은 코드로 스크립트를 만들어 붙이고, 실제로 키를 누르고 화면을 눌러 확인했습니다(각 1회).

시작하기 전에

  • 쓸 입력 장치가 SETTINGS → INPUT에서 켜져 있는지 봅니다(Keyboard, Mouse, Touch, Gamepads). 씬 설정과 에디터 설정
  • Launch한 게임 탭에서는 게임 화면을 한 번 눌러야 키 입력이 들어갑니다.

키보드

누르고 있는 동안: isPressed

var SideMove = ow.createScript('sideMove');
SideMove.attributes.add('speed', { type: 'number', default: 3 });

SideMove.prototype.update = function (dt) {
    var kb = this.app.keyboard;
    var x = 0;
    if (kb.isPressed(ow.KEY_LEFT)) x -= 1;
    if (kb.isPressed(ow.KEY_RIGHT)) x += 1;
    this.entity.translate(x * this.speed * dt, 0, 0);
};

실측에서 오른쪽 방향키를 누르자 엔티티가 +X로 움직였습니다.

누른 순간 한 번: wasPressed

Jump.prototype.update = function (dt) {
    if (this.app.keyboard.wasPressed(ow.KEY_SPACE)) {
        this.entity.rigidbody.applyImpulse(0, 5, 0);
    }
};

실측에서 스페이스 키를 0.12초 누르자 Box(Dynamic Rigid Body)가 한 번 뛰어올라 높이 0.5에서 1.73까지 올라갔습니다. 같은 키를 한 프레임보다 짧게 눌렀다 떼자(자동화 도구로 누름) wasPressed가 받지 못했습니다. 사람이 누르는 길이에서는 받습니다.

키 이름은 ow.KEY_로 시작합니다. 실측에서 ow.KEY_LEFT는 37, ow.KEY_SPACE는 32였습니다. 글자 키는 ow.KEY_A~ow.KEY_Z, 숫자 키는 ow.KEY_0~ow.KEY_9입니다.

마우스

Shoot.prototype.initialize = function () {
    this.app.mouse.on(ow.EVENT_MOUSEDOWN, this.onMouseDown, this);
    this.on('destroy', function () {
        this.app.mouse.off(ow.EVENT_MOUSEDOWN, this.onMouseDown, this);
    }, this);
};

Shoot.prototype.onMouseDown = function (event) {
    if (event.button === ow.MOUSEBUTTON_LEFT) {
        console.log('클릭: ' + event.x + ', ' + event.y);
    }
};

실측에서 게임 화면을 누르자 onMouseDown이 불리고 누른 좌표가 들어왔습니다. ow.EVENT_MOUSEDOWN은 'mousedown', ow.MOUSEBUTTON_LEFT는 0이었습니다. 화면 위 버튼을 누르는 일은 마우스 이벤트보다 버튼의 click 이벤트가 편합니다. 버튼은 터치에서도 같은 이벤트를 보냅니다. 작성 대기 휴대폰에서 버튼 click 실측

터치

터치 기기에서는 this.app.touch로 ow.EVENT_TOUCHSTART('touchstart') 등을 받습니다. 데스크톱에서는 this.app.touch가 null이므로, 터치를 쓰는 코드는 먼저 있는지 확인합니다.

if (this.app.touch) {
    this.app.touch.on(ow.EVENT_TOUCHSTART, this.onTouch, this);
}

작성 대기 휴대폰에서 터치 입력 실측

AI에게 맡기기

요청문에 키를 정확히 적습니다. 대회용 실측에서 요청문에 적은 키는 매번 지켜졌습니다.

방향키 왼쪽·오른쪽으로 Ball을 좌우로 움직이고, 스페이스 키를 누르면 한 번 점프하게 해 주세요.
휴대폰에서는 화면 왼쪽·오른쪽 절반을 누르면 같은 방향으로 움직이게 해 주세요.
요청한 것 외에는 손대지 마세요.

작성 대기 AI에게 맡기기 실측 — 같은 요청 3회, 휴대폰 포함

다음으로

원고 scripting/input.html