我已经汇总了一种在铰链接头上施加摩擦的行为。这里是:
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);
}
}
这回答了您问题的标题,也是我找到它时所寻找的。但是,这可能不适用于您更详细的描述中想要的内容。
这会施加与角速度成比例的摩擦力,如果没有角速度,则不会施加力。这意味着在恒定的力下,例如您的示例中的重力,它总是会以降低的速度移动。实际上,材料的缺陷和其他现实世界的混乱意味着对关节施加摩擦可以使它们在恒定扭矩下保持静止,但是在游戏引擎中,您将需要一些其他扭矩来抵抗恒定力。