Untitled
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...