瀏覽代碼

Merge pull request #45511 from KoBeWi/apocalypse_(world_crash)

Cache world in VisibilityNotifier3D to avoid crash
Rémi Verschelde 4 年之前
父節點
當前提交
1ea133b6b5
共有 2 個文件被更改,包括 8 次插入3 次删除
  1. 6 3
      scene/3d/visibility_notifier_3d.cpp
  2. 2 0
      scene/3d/visibility_notifier_3d.h

+ 6 - 3
scene/3d/visibility_notifier_3d.cpp

@@ -80,13 +80,16 @@ AABB VisibilityNotifier3D::get_aabb() const {
 void VisibilityNotifier3D::_notification(int p_what) {
 	switch (p_what) {
 		case NOTIFICATION_ENTER_WORLD: {
-			get_world_3d()->_register_notifier(this, get_global_transform().xform(aabb));
+			world = get_world_3d();
+			ERR_FAIL_COND(!world.is_valid());
+			world->_register_notifier(this, get_global_transform().xform(aabb));
 		} break;
 		case NOTIFICATION_TRANSFORM_CHANGED: {
-			get_world_3d()->_update_notifier(this, get_global_transform().xform(aabb));
+			world->_update_notifier(this, get_global_transform().xform(aabb));
 		} break;
 		case NOTIFICATION_EXIT_WORLD: {
-			get_world_3d()->_remove_notifier(this);
+			ERR_FAIL_COND(!world.is_valid());
+			world->_remove_notifier(this);
 		} break;
 	}
 }

+ 2 - 0
scene/3d/visibility_notifier_3d.h

@@ -33,10 +33,12 @@
 
 #include "scene/3d/node_3d.h"
 
+class World3D;
 class Camera3D;
 class VisibilityNotifier3D : public Node3D {
 	GDCLASS(VisibilityNotifier3D, Node3D);
 
+	Ref<World3D> world;
 	Set<Camera3D *> cameras;
 
 	AABB aabb;