melonjs-physics (물리 엔진)은(는) 무엇을 하나요?
이 스킬은 melonJS의 내장 SAT(분리 축 정리) 물리 세계와 planck.js / matter.js 어댑터를 사용한 충돌 감지, 물리 바디, 이동 및 공간 질의를 다룹니다. 다음 주제를 포함합니다: bodyDef vs Body, 충돌 유형과 마스크, 충돌 콜백 패밀리 및 발동 규칙, raycast / queryAABB / querySphere, 그리고 각 어댑터 간의 동작 차이. 트리거 키워드: Body, bodyDef, collision, collisionType, collisionMask, onCollision, onCollisionStart, onCollisionActive, raycast, queryAABB, querySphere, PlanckAdapter, MatterAdapter, gravity, velocity, applyForce, isGrounded, SAT.
주요 개념
bodyDef vs Body
bodyDef: 물리 바디를 생성할 때 사용하는 설정 객체로, 질량, 위치, 고정 여부 등 초기 속성을 정의합니다.Body: 생성된 물리 바디 인스턴스로, 실제 충돌 및 힘 시뮬레이션에 사용됩니다.
충돌 유형과 마스크
collisionType: 충돌 그룹을 정의하는 비트마스크 값입니다.collisionMask: 충돌할 대상의collisionType을 지정합니다. 두 객체의 마스크가 서로 일치해야 충돌이 발생합니다.
충돌 콜백
onCollision: 충돌이 시작될 때 호출됩니다.onCollisionStart: 충돌이 첫 프레임에 발생할 때 호출됩니다.onCollisionActive: 충돌이 지속되는 동안 매 프레임 호출됩니다.
공간 질의
raycast: 광선을 발사하여 첫 번째 충돌 객체를 찾습니다.queryAABB: 축 정렬 경계 상자(AABB) 영역 내의 모든 물리 바디를 반환합니다.querySphere: 구형 영역 내의 모든 물리 바디를 반환합니다.
어댑터 동작 차이
| 기능 | SAT (기본) | PlanckAdapter | MatterAdapter |
|---|---|---|---|
| 물리 엔진 | 내장 SAT | planck.js | matter.js |
| 충돌 유형 | 비트마스크 | 비트마스크 | 비트마스크 |
| 중력(gravity) | 설정 가능 | 설정 가능 | 설정 가능 |
| 힘 적용(applyForce) | 지원 | 지원 | 지원 |
| 지면 감지(isGrounded) | 직접 구현 필요 | 기본 지원 | 기본 지원 |
| 고정 바디(static) | isStatic 속성 | type: 'static' | isStatic: true |
사용 예시
// 기본 물리 바디 생성
let playerBody = new me.Body({
pos: new me.Vector2d(100, 200),
width: 32,
height: 48
});
// 충돌 유형 및 마스크 설정
playerBody.collisionType = me.game.COLLISION_TYPE.PLAYER;
playerBody.collisionMask = me.game.COLLISION_TYPE.ENEMY | me.game.COLLISION_TYPE.WALL;
// 충돌 콜백 등록
playerBody.onCollision = function(response, other) {
console.log("Player collided with:", other.body.collisionType);
return false; // 충돌 처리를 기본 동작으로 전달하지 않음
};
// 중력 적용 (프레임 업데이트에서)
playerBody.force.y += 9.8 * playerBody.mass;
// planck 어댑터 사용 예시 (PlanckAdapter 적용 후)
let physicsWorld = new me.PlanckAdapter();
physicsWorld.gravity = new me.Vector2d(0, 9.8);
참고 사항
- SAT 어댑터는 melonJS에 내장되어 추가 설치가 필요 없지만, planck/matter 어댑터는 별도 패키지로 제공됩니다.
isGrounded는 planck와 matter 어댑터에서 기본적으로 지원되지만, SAT에서는 직접 충돌 검사를 구현해야 합니다.- 모든 공간 질의 함수는 물리 세계가 활성화된 상태에서만 작동합니다.
이 스킬은 melonJS의 물리 시스템을 정확히 이해하고 활용하는 데 도움을 줍니다.