2017-06-26 10 views
0
using UnityEngine; 

public class Rope : MonoBehaviour 
{ 
    public GameObject hook; 
    public GameObject linkEnd; 
    public GameObject linkPrefab; 
    public int links; 

    public float range; 
    public float maxRange; 

    public float dist; 

    void Start() 
    { 
     GenerateRope(); 
    } 

    private void Update() 
    { 
     GetRange(); 
    } 

    private void GenerateRope() 
    { 
     Rigidbody2D previousRB = hook.GetComponent<Rigidbody2D>(); 

     for (int i = 0; i < links; i++) 
     { 
      GameObject link = Instantiate(linkPrefab, transform); 
      HingeJoint2D Hinge = link.GetComponent<HingeJoint2D>(); 
      DistanceJoint2D Distance = link.GetComponent<DistanceJoint2D>(); 
      Hinge.connectedBody = previousRB; 
      Distance.connectedBody = previousRB; 
      Hinge.autoConfigureConnectedAnchor = false; 
      Hinge.connectedAnchor = new Vector2(0f, -0.1f); 

      if (i < links -1) 
      { 
       previousRB = link.GetComponent<Rigidbody2D>(); 
      } 
      else 
      { 
       linkEnd.GetComponent<LinkEnd>().ConnectLinkEnd(link.GetComponent<Rigidbody2D>()); 
      } 
     } 
    } 

    private float GetRange() 
    { 
     return range = Mathf.Round(Vector2.Distance(hook.transform.position, linkEnd.transform.position)); 
    } 
} 

は、ヒンジジョイントと距離ジョイントを使用してさまざまな長さのチェーンを形成する一連のチェーンリンクをインスタンス化するゲームオブジェクトです。接続されたジョイントの長さの取得

私はこのチェーンの長さを取得しようとしていますが、それはインスタンス化されているが、苦労しています。さらに、リンクは現在のプレースホルダなので、将来はサイズが異なる可能性があるため、開始時に数学的に長さを取得することが非常に必要です。

任意の提案やガイドするのに役立ちます...

私の推測では、これを計算するために、各距離ジョイントのアンカー位置と接続アンカー位置を見つけ、それらを活用することでしたが、私はこだわっています!感謝! ありがとう!

答えて

1

DistanceJoint2DにはDistanceプロパティがあります。すべての関節の距離を合計して、全長を得ることができます。

float ropeLength = 0f; 
for (int i = 0; i < links; i++) 
{ 
    ... 
    DistanceJoint2D distanceJoint = link.GetComponent<DistanceJoint2D>(); 
    ropeLength += distanceJoint.Distance; 
    ... 
} 

あなたは、あなたがそれを必要とする場合は、あなたの長さは、常に最新であるように、あなたは関節の距離を変更するたびに呼び出すことができ、これを行いRecalculateLength()メソッドを書きたいかもしれません。

+0

ありがとうございました! @Wayland Yutani しかし、私は実際にこれをやっていました。簡単に言えば、CalculateLength()として取得できるものが10fpsのリンクが1fの場合、43fです。ここでは、Vector2.Disitanceを取得するGetRange()からの 'range'が33fです。 –

+0

GetRange()の 'range'の値は、私が望むものに近くなる可能性が高くなります。しかし、それは実時間計算であり、インスタンス化の開始からぶら下がりの終了までと異なるので、私は自分自身でかなり正しいものを得ることができませんでした。 –

関連する問題