获得连接关节的长度

时间:2017-06-26 07:53:01

标签: unity3d

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 个答案:

答案 0 :(得分:1)

DistanceJoint2D有一个Distance属性。您可以将每个关节的距离相加以获得全长。

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

您可能希望编写一个RecalculateLength()方法来执行此操作,您可以在更改关节距离时随时调用,以便您的长度始终保持最新状态(如果需要)。