Ver Fonte

Check that area is inside tree besides checking that queries are flushed, fixes #26148

Juan Linietsky há 6 anos atrás
pai
commit
edbf1d0ea4
2 ficheiros alterados com 2 adições e 2 exclusões
  1. 1 1
      scene/2d/area_2d.cpp
  2. 1 1
      scene/3d/area.cpp

+ 1 - 1
scene/2d/area_2d.cpp

@@ -426,7 +426,7 @@ bool Area2D::is_monitoring() const {
 
 void Area2D::set_monitorable(bool p_enable) {
 
-	if (locked || Physics2DServer::get_singleton()->is_flushing_queries()) {
+	if (locked || (is_inside_tree() && Physics2DServer::get_singleton()->is_flushing_queries())) {
 		ERR_EXPLAIN("Function blocked during in/out signal. Use set_deferred(\"monitorable\",true/false)");
 	}
 	ERR_FAIL_COND(locked || Physics2DServer::get_singleton()->is_flushing_queries());

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

@@ -439,7 +439,7 @@ Array Area::get_overlapping_bodies() const {
 
 void Area::set_monitorable(bool p_enable) {
 
-	if (locked || PhysicsServer::get_singleton()->is_flushing_queries()) {
+	if (locked || (is_inside_tree() && PhysicsServer::get_singleton()->is_flushing_queries())) {
 		ERR_EXPLAIN("Function blocked during in/out signal. Use set_deferred(\"monitorable\",true/false)");
 	}
 	ERR_FAIL_COND(locked || PhysicsServer::get_singleton()->is_flushing_queries());