ソースを参照

Fix Viewport interpolation mode

Viewport interpolation mode is a special case, which should be set to ON instead of INHERIT.
lawnjelly 1 年間 前
コミット
0f5cadfb56
2 ファイル変更8 行追加0 行削除
  1. 1 0
      doc/classes/Viewport.xml
  2. 7 0
      scene/main/viewport.cpp

+ 1 - 0
doc/classes/Viewport.xml

@@ -246,6 +246,7 @@
 		<member name="own_world" type="bool" setter="set_use_own_world" getter="is_using_own_world" default="false">
 			If [code]true[/code], the viewport will use a unique copy of the [World] defined in [member world].
 		</member>
+		<member name="physics_interpolation_mode" type="int" setter="set_physics_interpolation_mode" getter="get_physics_interpolation_mode" overrides="Node" enum="Node.PhysicsInterpolationMode" default="2" />
 		<member name="physics_object_picking" type="bool" setter="set_physics_object_picking" getter="get_physics_object_picking" default="false">
 			If [code]true[/code], the objects rendered by viewport become subjects of mouse picking process.
 		</member>

+ 7 - 0
scene/main/viewport.cpp

@@ -3681,6 +3681,13 @@ Viewport::Viewport() {
 	local_input_handled = false;
 	handle_input_locally = true;
 	physics_last_id = 0; //ensures first time there will be a check
+
+	// Physics interpolation mode for viewports is a special case.
+	// Typically viewports will be housed within Controls,
+	// and Controls default to PHYSICS_INTERPOLATION_MODE_OFF.
+	// Viewports can thus inherit physics interpolation OFF, which is unexpected.
+	// Setting to ON allows each viewport to have a fresh interpolation state.
+	set_physics_interpolation_mode(Node::PHYSICS_INTERPOLATION_MODE_ON);
 }
 
 Viewport::~Viewport() {