2017-06-12 22 views
0

ユニティのヒンジジョイントに剛体を取り付けます。Unity HingeJointに摩擦を加えるには?

ジョイントのアンカーの中央には取り付けられていません。

落ちないように私はUse Motor = trueTarget Velocity = 0と設定し、モーターに力を加えます。

しかし、これは、ビデオを見る、助けにはならない:問題を再現するためにhttps://drive.google.com/open?id=0B8QGeF3SuAgTNnozX05wTVJGZHc

画面(ないコードがありません):: enter image description here

ここ

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

は、サンプルプロジェクトであります

剛体の動きを止めるために関節に摩擦を適用するにはどうすればよいですか?

モータに十分なトルク(力)をかけると、剛体を正しく回転させる必要があるため、ダンパーをつけたり限界を設定したりするのは、私にとってはオプションではありません。
ダンパー/リミットのオン/オフを切り替えると、剛体は、落下方向に回転すると速く、逆方向に回転すると遅くなります。

+0

だから、この関節にはあまりにも摩擦がかかるので、落ちないようにしてください。あなたはそれを動かすためにまだ別の力を加えることができますか? – kiml42

+0

はい、私は掘削機の腕をシミュレートしようとします。 – Skyblade

+0

私は、重心が腕の上に重力を持ち、それが伸びるにつれて動くようにしたいと思うでしょう。モーターをオフにし、トルクをジョイントに適用する独自のスクリプトを作成することができます。理想的には、PIDコントローラを使用しますが、力を所望の角度からの距離に比例させるだけで、セグメント上の角度ドラッグは合理的な結果をもたらすはずです。 – kiml42

答えて

0

重力が欲しくないようですね。剛体のインスペクタで重力をオフにすることができます。

+0

いいえ、重力が必要です。 – Skyblade

+0

あなたの目標を明確にする必要があるかもしれません。あなたはそれが落ちることを望まないと言った。 –

+0

はい、私はそれが落ちる必要はありませんが、私は一定の速度で上下に回転したいです。これを行うには、私は摩擦が必要です。もし私がそれを動かすときに摩擦がなければ、動きが遅くなると速く回転し、動かされると遅くなります。 – Skyblade

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); 
    } 
} 

は、これはあなたの質問の見出しに応答し、私はそれを見つけたとき、私が探していたものです。しかし、これはおそらくあなたの詳細な説明からあなたが望むものに対してはうまくいかないでしょう。

これは角速度に比例する摩擦を適用します。角速度がない場合、力は加えられません。つまり、あなたの例では重力のような一定の力の下では、常に一定の速度で移動します。実際には、材料の不完全性や現実世界の厄介さは、関節に摩擦を加えると一定のトルクに耐えることができますが、ゲームエンジンでは、一定の力に対抗するためには他のトルクが必要になります。

関連する問題