물리 변수
물리 시스템은 "전통적인" 충돌 및 이동 시스템과 마찬가지로, 객체가 생성될 때 각 인스턴스에 할당되는 일련의 인스턴스 변수를 가지고 있습니다. 이러한 속성 중 일부는 GML에서 사용자가 정의할 수 있지만, 많은 속성은 읽기 전용이며, 더 많은 속성은 충돌 이벤트에서만 적용됩니다.
모든 물리 활성 객체에서 사용할 수 있는 변수
다음 변수는 모든 물리 활성 객체에서 존재하며, 인스턴스 및 스크립트 함수의 코드를 사용하여 읽고 쓸 수 있습니다:
변수 이름 | 설명 |
---|---|
phy_active | 객체가 물리 시스템에서 활성화되어 있는지 여부 |
phy_angular_velocity | 각속도 |
phy_angular_damping | 각 감쇠 |
phy_linear_velocity_x | X축 선형 속도 |
phy_linear_velocity_y | Y축 선형 속도 |
phy_linear_damping | 선형 감쇠 |
phy_speed_x | X축 속도 |
phy_speed_y | Y축 속도 |
phy_position_x | X축 위치 |
phy_position_y | Y축 위치 |
phy_position_xprevious | 이전 X축 위치 |
phy_position_yprevious | 이전 Y축 위치 |
phy_rotation | 회전 각도 |
phy_fixed_rotation | 고정 회전 여부 |
phy_bullet | 총알 물리 효과 여부 |
읽기 전용 변수
일부 변수는 읽기 전용으로, 인스턴스 코드나 스크립트 함수로 변경할 수 없습니다. 그러나 GameMaker 내부에서 변경될 수 있습니다. 다음은 모든 물리 활성 객체에서 존재하는 읽기 전용 변수 목록입니다:
변수 이름 | 설명 |
---|---|
phy_speed | 속도 |
phy_com_x | 질량 중심 X좌표 |
phy_com_y | 질량 중심 Y좌표 |
phy_dynamic | 동적 객체 여부 |
phy_kinematic | 운동학적 객체 여부 |
phy_inertia | 관성 |
phy_mass | 질량 |
phy_sleeping | 수면 상태 여부 |
충돌 이벤트에서 생성되는 임시 변수
충돌 이벤트에서만 생성되는 여러 임시 변수가 있으며, 이 변수들은 위에 나열된 변수들과 유사하며 읽기 전용입니다:
변수 이름 | 설명 |
---|---|
phy_collision_points | 충돌 지점 수 |
phy_collision_x | 충돌 X좌표 |
phy_collision_y | 충돌 Y좌표 |
phy_col_normal_x | 충돌 법선 X좌표 |
phy_col_normal_y | 충돌 법선 Y좌표 |
활용 예제
아래는 물리 변수를 활용한 다양한 예제입니다:
// 객체가 활성화되었는지 확인
if (phy_active) {
// 물체의 선형 속도 설정
phy_linear_velocity_x = 5;
phy_linear_velocity_y = 10;
}
// 충돌 이벤트에서 충돌 지점 출력
if (phy_collision_points > 0) {
show_message("충돌 지점 수: " + string(phy_collision_points));
}
// 물체의 질량을 기반으로 힘 계산
var force = phy_mass * 9.81; // 중력 가속도
// 각속도 변경
phy_angular_velocity += 0.1;
// 물체가 잠들었는지 확인
if (phy_sleeping) {
// 물체를 깨우기
phy_active = true;
}
// 물체의 위치를 이전 위치와 비교
if (phy_position_xprevious != phy_position_x) {
// 위치가 변경되었을 때의 처리
show_message("물체가 이동했습니다.");
}