2017-06-26 3 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)); 
    } 
} 

ist ein Spielobjekt instanziiert Reihe von Kettengliedern, um eine verschiedene Längen von Ketten mit Scharniergelenk und Distanzgelenk zu bilden.Länge der verbundenen Verbindungen erhalten

Ich versuche, die Länge dieser Kette zu erhalten, wenn es instanziiert wird, aber eine harte Zeit so zu haben. Darüber hinaus sind die Links ab sofort Platzhalter, so dass ihre Größe in Zukunft abweichen kann, so dass es mathematisch notwendig ist, die Länge bei der Initiierung mathematisch zu bestimmen.

Meine Vermutung war Abstand jedes Gelenkes der Ankerposition und mit Ankerposition zu finden und von ihnen Gebrauch machen, dies zu berechnen, aber ich bin fest ...

vorschläge oder Führer helfen! danke!

Antwort

1

Der DistanceJoint2D verfügt über eine Distanzeigenschaft. Sie können die Entfernung jedes Gelenks addieren, um die volle Länge zu erhalten.

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

Vielleicht möchten Sie eine RecalculateLength() -Methode schreiben, das dies tut, die Sie jederzeit aufrufen können Sie eine gemeinsame Strecke ändern, so dass Ihre Länge immer auf dem neuesten Stand ist, wenn Sie es brauchen.

+0

Danke für die nette Ausarbeitung! @Wayland Yutani Allerdings tat ich das vorher und was ich bekam, war eine ganz andere Zahl. Einfach ausgedrückt: Wenn 10 Links Abstand von 1f haben, dann bekomme ich als CalculateLength() 43f, wo mein 'Bereich' von GetRange(), der Vector2.Dsitance von Anfang bis Ende bekommt, 33f ergibt. –

+0

Der 'Bereich' Wert von GetRange() ist wahrscheinlich näher Wert, was ich will. Da es sich jedoch um eine Echtzeitberechnung handelt und es sich vom Start der Instanziierung bis zum Abschluss des Aufhängens unterscheidet, konnte ich die Dinge nicht ganz selbst in die Hand nehmen. –

Verwandte Themen