Godot 4.2.1中设置RigidBody2D缩放解决布偶翻转失控旋转问题
2D布偶系统转向后失控旋转问题
我给玩家制作了一个2D布偶(ragdoll)系统,核心需求是玩家转向后触发布偶效果时,布偶不会出现失控旋转。尝试过设置父Node2D的负缩放,再通过PhysicsServer2D将该缩放应用到刚体,但触发布偶效果后,布偶仍会失控旋转。还尝试过手动设置位置、通过PhysicsServer2D设置刚体缩放及全局位置等操作,相关代码如下:
func flip(dir): ragdollFunc(false,"idle") scale.x = dir for limb in UFunc.get_all_children(self,"RigidBody2D"): PhysicsServer2D.body_set_state( limb.get_rid(), PhysicsServer2D.BODY_STATE_TRANSFORM, Transform2D.IDENTITY.translated(scale) #Transform2D.IDENTITY.translated(limb.global_position) ) ragdollFunc(true,"idle") func ragdollFunc(_bool,animName,specific:=""): $Animation.stop() var all = UFunc.get_all_children(self) for body in all: for body2 in all: if body.is_class("RigidBody2D") && body2.is_class("RigidBody2D"): body.add_collision_exception_with(body2) if body.is_class("RigidBody2D"): #body.add_collision_exception_with(self) body.freeze = !_bool if _bool == false: $Animation.play(animName) for limb in UFunc.get_all_children(self,"RigidBody2D"): PhysicsServer2D.body_set_state( limb.get_rid(), PhysicsServer2D.BODY_STATE_TRANSFORM, Transform2D.IDENTITY.translated(limb.global_position) ) for limb in UFunc.get_all_children(self,"RigidBody2D"): PhysicsServer2D.body_set_state( limb.get_rid(), PhysicsServer2D.BODY_STATE_TRANSFORM, Transform2D.IDENTITY.translated(scale) #Transform2D.IDENTITY.translated(limb.global_position) )
节点树及布偶效果如下:
内容的提问来源于stack exchange,提问作者Aaron Baer
相关产品推荐
相关产品推荐

