0

我将刚体附加到 Unity 中的 HingeJoint。

它没有连接在关节锚的中心。

为了防止它掉下来,我设置了Use Motor = trueTarget Velocity = 0并对电机施加一些力。

但是,这无济于事,请参阅视频:

http://g.recordit.co/JJ0cmfT1Mb.gif

这是示例项目:https ://drive.google.com/open?id=0B8QGeF3SuAgTNnozX05wTVJGZHc

重现问题的屏幕(没有代码): 在此处输入图像描述

如何对关节施加摩擦以阻止刚体移动?

用阻尼器设置弹簧或施加限制对我来说不是一个选择,因为当我向电机施加足够的扭矩(力)时,我需要正确旋转刚体。
如果我打开和关闭阻尼器/限制,刚体在下降方向旋转时移动得更快,而在相反方向旋转时移动得更慢。

4

2 回答 2

1

我已经汇总了一种在铰链接头上施加摩擦的行为。这里是:

using UnityEngine;

public class JointFriction : MonoBehaviour {

  [Tooltip("mulitiplier for the angular velocity for the torque to apply.")]
  public float Friction = 0.4f;

  private HingeJoint _hinge;
  private Rigidbody _thisBody;
  private Rigidbody _connectedBody;
  private Vector3 _axis;  //local space

  // Use this for initialization
  void Start () {
    _hinge = GetComponent<HingeJoint>();
    _connectedBody = _hinge.connectedBody;
    _axis = _hinge.axis;

    _thisBody = GetComponent<Rigidbody>();
  }

  // Update is called once per frame
  void FixedUpdate () {
    var angularV = _hinge.velocity;
    //Debug.Log("angularV " + angularV);
    var worldAxis = transform.TransformVector(_axis);
    var worldTorque = Friction * angularV * worldAxis;

    _thisBody.AddTorque(-worldTorque);
    _connectedBody.AddTorque(worldTorque);
  }
}

这回答了您问题的标题,也是我找到它时所寻找的。但是,这可能不适用于您更详细的描述中想要的内容。

这会施加与角速度成比例的摩擦力,如果没有角速度,则不会施加力。这意味着在恒定的力下,例如您的示例中的重力,它总是会以降低的速度移动。实际上,材料的缺陷和其他现实世界的混乱意味着对关节施加摩擦可以使它们在恒定扭矩下保持静止,但是在游戏引擎中,您将需要一些其他扭矩来抵抗恒定力。

于 2017-11-12T20:49:49.793 回答
0

听起来你不想要重力。您可以在刚体的检查器中关闭重力。

于 2017-06-16T03:33:51.067 回答