using System.Collections;
using System.Collections.Generic;
public class ConnectPanelWithLine : MonoBehaviour
public Transform startObject;
public RectTransform panelObject;
public float lineSize = 0.015f;
public Material material;
public ConnectPoint connectPoint= ConnectPoint.Auto;
private LineRenderer lineRenderer;
private Vector3 leftCenter;
private Vector3 rightCenter;
private Vector3 bottomCenter;
private Vector3 topCenter;
material = Resources.Load("Materials/Line");
lineRenderer = GetComponent();
if (lineRenderer == null) lineRenderer = gameObject.AddComponent();
lineRenderer.positionCount = 2;
lineRenderer.material = material;
if (startObject == null || panelObject == null) return;
private void drawerLine()
if (startObject == null || panelObject == null || lineRenderer == null) return;
lineRenderer.startWidth = lineSize;
lineRenderer.endWidth = lineSize;
lineRenderer.SetPosition(0, startObject.position);
case ConnectPoint.Auto: lineRenderer.SetPosition(1, getClosestObje()); break;
case ConnectPoint.LeftCenter: lineRenderer.SetPosition(1,leftCenter); break;
case ConnectPoint.RightCenter: lineRenderer.SetPosition(1,rightCenter); break;
case ConnectPoint.TopCenter: lineRenderer.SetPosition(1,topCenter); break;
case ConnectPoint.BottomCenter : lineRenderer.SetPosition(1,bottomCenter); break;
private void getUIObjectBounds()
RectTransform rectTransform = panelObject.GetComponent();
if (rectTransform == null) return;
Vector3 positionRelativeToCanvas = rectTransform.position;
Vector2 sizeRelativeToCanvas = Vector2.Scale(rectTransform.rect.size, rectTransform.lossyScale);
Quaternion rotationQuaternion = rectTransform.rotation;
leftCenter = positionRelativeToCanvas - rotationQuaternion * new Vector3(0.5f * sizeRelativeToCanvas.x, 0f, 0f);
rightCenter = positionRelativeToCanvas + rotationQuaternion * new Vector3(0.5f * sizeRelativeToCanvas.x, 0f, 0f);
topCenter = positionRelativeToCanvas + rotationQuaternion * new Vector3(0f, 0.5f * sizeRelativeToCanvas.y, 0f);
bottomCenter = positionRelativeToCanvas - rotationQuaternion * new Vector3(0f, 0.5f * sizeRelativeToCanvas.y, 0f);
private Vector3 getClosestObje()
if (panelObject == null|| startObject==null) return Vector3.zero;
float distance1 = Vector3.Distance(leftCenter, startObject.position);
float distance2 = Vector3.Distance(rightCenter, startObject.position);
float distance3 = Vector3.Distance(bottomCenter, startObject.position);
float distance4 = Vector3.Distance(topCenter, startObject.position);
float minDistance = Mathf.Min(distance1, distance2, distance3, distance4);
if (minDistance == distance1) return leftCenter;
else if (minDistance == distance2) return rightCenter;
else if (minDistance == distance3) return bottomCenter;
else if (minDistance == distance4) return topCenter;
return panelObject.position;