Untitled
unknown
csharp
3 years ago
1.9 kB
6
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...