浏览代码

Fix crash with `PhysicsBody2D/3D::get_gravity` with invalid state

A Thousand Ships 1 年之前
父节点
当前提交
fb1662b939
共有 2 个文件被更改,包括 6 次插入2 次删除
  1. 3 1
      scene/2d/physics_body_2d.cpp
  2. 3 1
      scene/3d/physics_body_3d.cpp

+ 3 - 1
scene/2d/physics_body_2d.cpp

@@ -147,7 +147,9 @@ bool PhysicsBody2D::test_move(const Transform2D &p_from, const Vector2 &p_motion
 }
 
 Vector2 PhysicsBody2D::get_gravity() const {
-	return PhysicsServer2D::get_singleton()->body_get_direct_state(get_rid())->get_total_gravity();
+	PhysicsDirectBodyState2D *state = PhysicsServer2D::get_singleton()->body_get_direct_state(get_rid());
+	ERR_FAIL_NULL_V(state, Vector2());
+	return state->get_total_gravity();
 }
 
 TypedArray<PhysicsBody2D> PhysicsBody2D::get_collision_exceptions() {

+ 3 - 1
scene/3d/physics_body_3d.cpp

@@ -189,7 +189,9 @@ bool PhysicsBody3D::test_move(const Transform3D &p_from, const Vector3 &p_motion
 }
 
 Vector3 PhysicsBody3D::get_gravity() const {
-	return PhysicsServer3D::get_singleton()->body_get_direct_state(get_rid())->get_total_gravity();
+	PhysicsDirectBodyState3D *state = PhysicsServer3D::get_singleton()->body_get_direct_state(get_rid());
+	ERR_FAIL_NULL_V(state, Vector3());
+	return state->get_total_gravity();
 }
 
 void PhysicsBody3D::set_axis_lock(PhysicsServer3D::BodyAxis p_axis, bool p_lock) {