/// <summary>
/// UI连线功能
/// </summary>
public class LinkLine : MonoBehaviour
{
//Y值小的是A
public RectTransform buttonA;
public RectTransform buttonB;
public RectTransform rt;
void Awake(){
rt = GetComponent<RectTransform>();
}
public void InitData(GameObject A, GameObject B) {
if (A.transform.localPosition.y >= B.transform.localPosition.y)
{
buttonB = A.GetComponent<RectTransform>();
buttonA = B.GetComponent<RectTransform>();
}
else
{
buttonA = A.GetComponent<RectTransform>();
buttonB = B.GetComponent<RectTransform>();
}
Link();
Vector3 posA = buttonA.localPosition;
Vector3 posB = buttonB.localPosition;
Vector3 midPos = (posA + posB) / 2;
rt.transform.localPosition = midPos;
Vector2 size = rt.sizeDelta;
size.x = Vector3.Distance(posA, posB);
rt.sizeDelta = size;
Vector3 relativePos = posB - posA;
float angle = Mathf.Acos(Vector3.Dot(relativePos.normalized, buttonA.right)) * Mathf.Rad2Deg;
Vector3 euler = rt.localEulerAngles;
euler.z = angle;
rt.localEulerAngles = euler;
}
public static void Link(GameObject A, GameObject B, Transform parent)
{
GameObject lineClone = ResourcesManager.Instance.LoadAsset("Image", parent);
lineClone.transform.SetAsFirstSibling();
LinkLine line = lineClone.GetComponent<LinkLine>();
line.InitData(A, B);
/// UI连线功能
/// </summary>
public class LinkLine : MonoBehaviour
{
//Y值小的是A
public RectTransform buttonA;
public RectTransform buttonB;
public RectTransform rt;
void Awake(){
rt = GetComponent<RectTransform>();
}
public void InitData(GameObject A, GameObject B) {
if (A.transform.localPosition.y >= B.transform.localPosition.y)
{
buttonB = A.GetComponent<RectTransform>();
buttonA = B.GetComponent<RectTransform>();
}
else
{
buttonA = A.GetComponent<RectTransform>();
buttonB = B.GetComponent<RectTransform>();
}
Link();
}
Vector3 posA = buttonA.localPosition;
Vector3 posB = buttonB.localPosition;
Vector3 midPos = (posA + posB) / 2;
rt.transform.localPosition = midPos;
Vector2 size = rt.sizeDelta;
size.x = Vector3.Distance(posA, posB);
rt.sizeDelta = size;
Vector3 relativePos = posB - posA;
float angle = Mathf.Acos(Vector3.Dot(relativePos.normalized, buttonA.right)) * Mathf.Rad2Deg;
Vector3 euler = rt.localEulerAngles;
euler.z = angle;
rt.localEulerAngles = euler;
}
public static void Link(GameObject A, GameObject B, Transform parent)
{
GameObject lineClone = ResourcesManager.Instance.LoadAsset("Image", parent);
lineClone.transform.SetAsFirstSibling();
LinkLine line = lineClone.GetComponent<LinkLine>();
line.InitData(A, B);
}
}