فهرست منبع

Merge pull request #53239 from nekomatata/fix-animatable-body-initial-state

Rémi Verschelde 3 سال پیش
والد
کامیت
5d6a98f04e
2فایلهای تغییر یافته به همراه12 افزوده شده و 3 حذف شده
  1. 6 1
      scene/2d/physics_body_2d.cpp
  2. 6 2
      scene/3d/physics_body_3d.cpp

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

@@ -288,6 +288,12 @@ void AnimatableBody2D::_notification(int p_what) {
 	switch (p_what) {
 		case NOTIFICATION_ENTER_TREE: {
 			last_valid_transform = get_global_transform();
+			_update_kinematic_motion();
+		} break;
+
+		case NOTIFICATION_EXIT_TREE: {
+			set_only_update_transform_changes(false);
+			set_notify_local_transform(false);
 		} break;
 
 		case NOTIFICATION_LOCAL_TRANSFORM_CHANGED: {
@@ -313,7 +319,6 @@ void AnimatableBody2D::_bind_methods() {
 
 AnimatableBody2D::AnimatableBody2D() :
 		StaticBody2D(PhysicsServer2D::BODY_MODE_KINEMATIC) {
-	_update_kinematic_motion();
 }
 
 void RigidDynamicBody2D::_body_enter_tree(ObjectID p_id) {

+ 6 - 2
scene/3d/physics_body_3d.cpp

@@ -340,6 +340,12 @@ void AnimatableBody3D::_notification(int p_what) {
 	switch (p_what) {
 		case NOTIFICATION_ENTER_TREE: {
 			last_valid_transform = get_global_transform();
+			_update_kinematic_motion();
+		} break;
+
+		case NOTIFICATION_EXIT_TREE: {
+			set_only_update_transform_changes(false);
+			set_notify_local_transform(false);
 		} break;
 
 		case NOTIFICATION_LOCAL_TRANSFORM_CHANGED: {
@@ -367,8 +373,6 @@ void AnimatableBody3D::_bind_methods() {
 AnimatableBody3D::AnimatableBody3D() :
 		StaticBody3D(PhysicsServer3D::BODY_MODE_KINEMATIC) {
 	PhysicsServer3D::get_singleton()->body_set_state_sync_callback(get_rid(), this, _body_state_changed_callback);
-
-	_update_kinematic_motion();
 }
 
 void RigidDynamicBody3D::_body_enter_tree(ObjectID p_id) {