OasisW매뉴얼 English
섹션 7. 물리

물리가 동작하는 방식

OasisW의 물리는 엔티티에 붙인 두 컴포넌트와 프로젝트에 한 번 가져오는 물리 모듈로 움직입니다. 이 페이지는 세 요소가 각각 무엇을 맡는지, 물체가 왜 움직이지 않거나 통과하는지 이해하는 데 필요한 구조를 설명합니다. 직접 붙이는 절차는 충돌 판정 붙이기에 있습니다.

세 요소

요소자리맡는 일
물리 모듈(Ammo)프로젝트에 한 번. SETTINGS → PHYSICS → IMPORT AMMO, 또는 COLLISION 칸의 안내 버튼실제 계산. 없으면 Rigid Body가 아무 오류 없이 멈춰 있습니다
Collision엔티티마다부딪히는 범위의 모양과 크기
Rigid Body엔티티마다움직이는 방식, 무게, 마찰, 튕김

물리 모듈을 가져오면 ASSETS에 Ammo 폴더가 생기고, SETTINGS의 SCRIPTS LOADING ORDER 맨 앞에 ammo.wasm.js, ammo.js가 들어갑니다(2026-10-29 확인).

조합에 따른 동작

2026-10-29 실측(각 1회 이상)에서 확인한 조합입니다.

CollisionRigid Body동작
있음Dynamic중력으로 떨어지고, 부딪히면 튕기거나 멈춥니다
있음Static움직이지 않고 다른 물체를 막습니다(바닥, 벽)
있음없음물체를 막지 않습니다. 대신 들어오고 나가는 것을 알려 주는 트리거가 됩니다(triggerenter)
없음있음물리 계산에 참여하지 않습니다. 실측에서 Collision 없이 Dynamic Rigid Body만 붙인 상자는 높이 4에 그대로 떠 있었습니다

Kinematic은 스크립트나 애니메이션으로 움직이면서 다른 물체를 미는 타입입니다. 중력을 받지 않고, 부딪혀도 밀려나지 않습니다. 실측에서 Kinematic 상자를 스크립트로 2.5미터 옮기자(translate, teleport 둘 다), 앞에 있던 Dynamic 상자가 밀려났습니다(각 1회).

중력과 단위

  • 중력은 SETTINGS → PHYSICS → Gravity에서 정합니다. 처음 값은 0, -9.8, 0이고, Launch한 게임에서도 같은 값이었습니다.
  • 길이 단위는 미터, 무게(Mass)는 킬로그램으로 다룹니다. 기본 Box는 한 변 1미터입니다.
  • 엔티티마다 중력을 다르게 받게 하려면 Rigid Body의 Gravity Scale(처음 값 1)을 바꿉니다. 실측에서 0.6초 동안 1인 상자는 1.72미터, 0.25인 상자는 0.43미터 떨어졌습니다(1회).

물리로 움직이는 엔티티를 옮길 때

Dynamic 엔티티는 물리 모듈이 위치를 정합니다. 스크립트에서 setPosition으로 옮기면 물리 계산과 어긋날 수 있습니다. 물리로 움직이는 엔티티는 this.entity.rigidbody.teleport(x, y, z)로 옮기고, 힘은 applyForce(계속 미는 힘)·applyImpulse(한 번 툭 치는 힘)로 줍니다.

  • teleport로 상자를 높이 4로 옮기자 다시 떨어져 바닥에 닿았습니다(2회).
  • applyImpulse(0, 5, 0)을 한 번 주자 바닥에 있던 상자(Mass 1)가 높이 0.5에서 1.73까지 뛰어올랐습니다(1회, 키보드·마우스·터치 입력의 점프 예제).
  • applyForce는 부른 프레임에만 힘을 줍니다. Mass 1 상자에 applyForce(0, 15, 0)을 1초 동안 매 프레임 주자 0.5초에 높이 1.08, 1초에 3.05까지 올라갔고, 최고 4.35에서 다시 내려왔습니다. 한 번만 부르면 상자는 움직이지 않았습니다(최고 0.500). 계속 밀려면 update에서 매 프레임 부릅니다(2026-10-30, 각 1회).

부딪힘 받기

부딪힘은 스크립트의 이벤트로 받습니다. 막는 물체끼리는 collisionstart, 트리거에는 triggerenter를 씁니다. 자세한 내용은 충돌 이벤트 받기에 있습니다.

다음으로

원고 physics/physics-overview.html