Untitled

 avatar
unknown
csharp
3 years ago
1.9 kB
3
Indexable
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RB_Push : MonoBehaviour
{
    public GameObject dj2d; //Make sure these prefabs have distanceJoint2D attached to them.

    Rigidbody2D rb;
    DistanceJoint2D distanceJoint;
    [SerializeField] Transform target;

    [Range(0,10)]
    [SerializeField] int connectCount;

    public List<DistanceJoint2D> distanceJoints = new List<DistanceJoint2D>();

    private void Awake()
    {
        distanceJoint = GetComponent<DistanceJoint2D>();
        rb = GetComponent<Rigidbody2D>();
        BuildJoints();
    }

    void BuildJoints()
    {
        float distance = Vector2.Distance(transform.position, target.position);
        float segmentLength = distance / connectCount;

        Vector2 dirTarget = (target.position - transform.position).normalized;

        if (connectCount == 0)
        {
            distanceJoint.connectedBody = target.GetComponent<Rigidbody2D>();
        }

        else
        {
            for (int i = 0; i < connectCount; i++)
            {
                DistanceJoint2D dj = Instantiate(dj2d, new Vector2(transform.position.x, transform.position.y) + (dirTarget * i * segmentLength), Quaternion.identity).GetComponent<DistanceJoint2D>();
                distanceJoints.Add(dj);

                if (distanceJoints.Count > 1 && distanceJoints.Count - 1 < connectCount)
                {
                    distanceJoints[i - 1].connectedBody = distanceJoints[i].GetComponent<Rigidbody2D>();

                    if (distanceJoints.Count >= connectCount)
                    {
                        distanceJoints[i].connectedBody = target.GetComponent<Rigidbody2D>();
                    }
                }
            }
        }

        distanceJoint.connectedBody = distanceJoints[0].GetComponent<Rigidbody2D>();
    }
}
Editor is loading...