OasisW매뉴얼 English
섹션 8. UI와 사운드 방법 작성 대기 2

소리 넣기

게임에 효과음이나 배경음을 넣으려면 소리 파일을 에셋으로 올리고, 소리를 낼 엔티티에 Sound 컴포넌트를 붙인 뒤 그 안의 슬롯에 파일을 연결합니다. 이 페이지는 게임이 시작될 때 소리를 내는 방법과, 물체가 부딪힐 때 소리를 내는 방법을 설명합니다.

이 페이지의 실측은 2026-10-29 oasisw.ai 에디터(판 표시 OasisW 7e2aa65, macOS Chrome)에서 충돌 판정 붙이기에서 쓴 프로젝트로 한 것입니다. Launch한 게임에서 슬롯의 재생 상태와 재생 횟수를 읽어 확인했고, 부딪힐 때 나는 소리는 귀로도 확인했습니다. 별도 표시가 없는 동작은 1회 확인했습니다.

시작하기 전에

  • 소리 파일이 하나 필요합니다. 실측에는 0.35초짜리 짧은 효과음(hit.wav)을 썼습니다. 소리 파일도 글꼴처럼 파일마다 사용 허락 조건이 다르므로, 공개할 게임에 넣어도 되는지 먼저 확인합니다.
  • 부딪힐 때 소리를 내는 방법은 충돌 이벤트 받기를 바탕으로 합니다. 소리를 낼 엔티티에 Collision과 Rigid Body가 붙어 있어야 합니다.

에디터에서 직접 하기

1. 소리 파일 올리기

ASSETS 오른쪽 위 Upload를 누르고 소리 파일을 고릅니다. 실측에서는 지금 열려 있는 폴더에 음표 아이콘의 hit.wav가 생겼습니다. 글꼴과 달리 폴더가 따로 생기지 않았습니다.

2. Sound 컴포넌트 붙이기

  1. HIERARCHY에서 소리를 낼 엔티티를 고릅니다. 실측에서는 떨어지는 Box를 골랐습니다.
  2. + ADD COMPONENT → Audio → Sound를 누릅니다.
+ ADD COMPONENT 메뉴의 Audio 하위 메뉴. Audio Listener, Sound
① Audio ② Sound

SOUND 칸이 붙고, 그 아래에 빈 슬롯 Slot 1이 하나 생깁니다. 슬롯의 Asset은 처음에 Empty입니다.

3. 슬롯에 소리 연결하기

  1. ASSETS의 소리 파일을 끌어 슬롯의 Asset에 놓습니다. Empty가 파일 이름으로 바뀝니다.
  2. 슬롯의 Name을 알아보기 쉬운 이름으로 바꿉니다. 스크립트에서 이 이름으로 소리를 고릅니다. 실측에서는 hit으로 바꿨습니다.
  3. 게임이 시작되자마자 소리를 내려면 Auto Play를 켭니다. 배경음처럼 끝나면 처음부터 다시 틀려면 Loop도 켭니다.
SOUND 칸의 슬롯. Name은 hit, Asset은 hit.wav, 아래에 Start Time, Duration, Auto Play, Overlap, Loop, Volume, Pitch
① 소리 파일 ② 슬롯 이름 ③ 연결한 파일 ④ Auto Play ⑤ Loop

Auto Play와 Loop를 켜고 Launch하자, 게임이 시작된 뒤 3초가 지나도 슬롯이 계속 재생 중이었고 소리 신호가 나오고 있었습니다. 두 칸을 끄면 게임 중에 저절로 소리가 나지 않습니다.

SOUND 칸의 주요 값

자리칸뜻
컴포넌트 전체Positional처음에 켜져 있습니다. 켜 두면 소리를 듣는 위치와 엔티티 사이의 거리에 따라 소리 크기가 달라집니다. 아래 "거리에 따른 크기" 참고
Volume, Pitch컴포넌트에 담긴 모든 슬롯의 크기와 높낮이(처음 값 1)
슬롯마다Name스크립트에서 소리를 고를 때 쓰는 이름
Asset재생할 소리 파일
Auto Play게임이 시작되면 저절로 재생
Loop끝나면 처음부터 다시 재생
Overlap재생 중에 다시 재생하라는 명령이 오면 겹쳐 재생할지 정합니다. 꺼져 있으면(처음 값) 앞 소리를 끊고 처음부터 다시 틉니다. 실측에서 0.08초 간격으로 두 번 재생하자 꺼짐은 동시에 1개, 켜짐은 동시에 2개가 재생 중이었습니다

거리에 따른 크기

Launch한 게임에서 같은 소리를 거리만 바꿔 틀고 출력 신호의 크기(최대값)를 읽었습니다(2026-10-29, 각 1회).

설정1m10m100m(또는 19m)
처음 값(Max Distance 10000, Linear)0.2990.2990.296(100m)
Max Distance 200.2990.1570.016(19m)

처음 값에서는 Max Distance가 10000미터라, 게임 안의 거리로는 소리 크기가 거의 줄지 않습니다. 멀어질수록 작아지게 하려면 Max Distance를 게임 크기에 맞게(예: 20) 줄입니다. Linear에서는 Ref Distance(1)까지는 그대로이고, Max Distance에서 거의 들리지 않게 됩니다.

새 씬의 카메라에는 Audio Listener가 없습니다. 위 실측은 Audio Listener 없이 원점(0, 0, 0)에서 떨어진 거리로 쟀습니다. 카메라나 캐릭터를 따라 듣게 하려면 그 엔티티에 + ADD COMPONENT → Audio → Audio Listener를 붙입니다. 실측에서 X 19에 Audio Listener를 붙인 엔티티를 두자, 같은 자리(X 19)의 소리는 0.423으로 크게, 원점의 소리는 0.016으로 작게 들렸습니다(Max Distance 20). 듣는 기준점이 Audio Listener로 옮겨 간 것입니다.

소리가 둘 이상이면 + ADD SLOT으로 슬롯을 더 만들고, 슬롯마다 다른 이름과 파일을 줍니다.

4. 부딪힐 때 소리 내기

원하는 때에 소리를 내려면 스크립트에서 슬롯 이름으로 재생합니다. 다음은 엔티티가 무언가에 부딪힐 때마다 hit 슬롯을 재생하는 스크립트입니다. 스크립트를 만들고 붙이는 법은 새 스크립트 만들고 붙이기에 있습니다.

var PlayHit = ow.createScript('playHit');

// 낼 소리의 슬롯 이름입니다
PlayHit.attributes.add('slotName', {
    type: 'string',
    default: 'hit',
    description: 'SOUND 칸의 슬롯 이름'
});

PlayHit.prototype.initialize = function () {
    this.entity.collision.on('collisionstart', this.onHit, this);
};

PlayHit.prototype.onHit = function () {
    this.entity.sound.play(this.slotName);
};
  1. 이 스크립트(playHit.js)를 Sound가 붙은 엔티티에 붙입니다.
  2. SCRIPT 칸의 slotName이 3단계에서 정한 슬롯 이름과 같은지 봅니다. 다르면 소리가 나지 않습니다.
  3. 슬롯의 Auto Play와 Loop는 끕니다.
  4. ▶ Launch로 확인합니다.
Box의 SCRIPT 칸에 playHit과 slotName hit, 아래 SOUND 칸의 슬롯 이름 hit
① 붙인 스크립트 ② 스크립트가 고를 슬롯 이름 ③ 슬롯 이름. ②와 ③이 같아야 합니다

실측에서 Box를 높이 4에서 떨어뜨리자, 바닥에 처음 닿을 때와 한 번 튀어 다시 닿을 때 두 번 소리가 재생되었습니다(2회 모두 2번). 튈 때마다 소리가 나는 것이 싫으면 on 대신 once로 처음 한 번만 받습니다. 차이는 충돌 이벤트 받기에 있습니다.

확인할 것

  • 소리가 나지 않으면 먼저 기기 소리가 켜져 있는지, 슬롯의 Asset이 Empty가 아닌지, 스크립트의 슬롯 이름이 맞는지 봅니다.
  • 브라우저는 보통 사용자가 페이지를 한 번 누르기 전에는 소리를 막습니다. 실측 환경에서는 누르기 전에도 소리 신호가 나왔지만, 공개한 게임을 처음 연 사람에게도 그런지는 확인하지 않았습니다. 시작 화면에서 한 번 누르게 한 뒤 배경음을 트는 구성이 안전합니다. 작성 대기 공개 주소를 처음 연 브라우저에서 Auto Play 소리가 나는지 실측

AI에게 맡기기

요청 예:

ASSETS의 hit.wav를 써서, 상자가 바닥에 부딪힐 때마다 효과음을 내 줘.
소리는 상자의 Sound 컴포넌트 슬롯에 넣고, 슬롯 이름은 hit으로 해 줘.
요청한 것 외에는 손대지 마세요.

끝난 뒤 SOUND 칸의 슬롯과 스크립트의 슬롯 이름이 맞는지 보고, Launch로 소리를 들어 봅니다. 작성 대기 AI에게 맡기기 실측 — 같은 요청 3회

다음으로

원고 ui-sound/add-sound.html