效果如图
只是自己记录一下,代码写的很”蔡”…还在学习中…

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using UnityEngine.UI;

public class CanalLineCon : MonoBehaviour
{
    public Transform imageBuffer;
    public Transform imageBuffer2;
    public RectTransform pa; //A点
    public RectTransform pb; //B点

    private RectTransform paa, pbb;
    private RectTransform imgBuf, imgBuf2;


    private void Start()
    {
        paa = pa.GetComponent<RectTransform>();
        pbb = pb.GetComponent<RectTransform>();

        imgBuf = imageBuffer.GetComponent<RectTransform>();
        imgBuf2 = imageBuffer2.GetComponent<RectTransform>();


    }

    float timer = 0, timerr = 0;

    private Transform traBuf;
    Image imgg;

    int i = 10, o = 100;

    void Update()
    {
        if (imageBuffer.childCount < 1)
        {
            for (int i = 0; i < imageBuffer2.childCount; i++)
            {
                imageBuffer2.GetChild(0).SetParent(imageBuffer);
            }
        }

        //每隔2秒pb pa就变换一次位置
        timer += Time.deltaTime;
        //
        timerr += Time.deltaTime;
        if (timerr >= i)
        {
            print("1");
            i = 2;
            timerr = 0;
            imgBuf.anchoredPosition = new Vector2(imgBuf.anchoredPosition.x - o, 0);
            imgBuf2.anchoredPosition = new Vector2(imgBuf2.anchoredPosition.x - o, 0);
        }

        if (timer >= 2)
        {
           //随机数
           int r = UnityEngine.Random.Range(-50, 50);
           timer = 0;
           if (i == 2)
           {
               paa.anchoredPosition = new Vector2(pb.anchoredPosition.x-100, pb.anchoredPosition.y);
               pbb.anchoredPosition = new Vector2(pb.anchoredPosition.x, pb.anchoredPosition.y+r);
           }
           else
           {
               paa.anchoredPosition = new Vector2(pb.anchoredPosition.x, pb.anchoredPosition.y);
               pbb.anchoredPosition = new Vector2(pb.anchoredPosition.x+100, pb.anchoredPosition.y+r);
           }

           traBuf = imageBuffer.transform.GetChild(0);
           traBuf.SetParent(imageBuffer2);

           traBuf.position = pa.position + (pb.position - pa.position)/2;
           traBuf.localRotation = Quaternion.AngleAxis(-GetAngle(), Vector3.forward);

           var distance = Vector2.Distance(pb.anchoredPosition, pa.anchoredPosition);
           imgg = traBuf.GetComponent<Image>();
           //imgg.rectTransform.sizeDelta = new Vector2(10, Math.Max(1, distance - 30));
           imgg.rectTransform.sizeDelta = new Vector2(10, distance*5);
        }
    }

    public float GetAngle()
    {
        var dir = pb.position - pa.position;
        var dirV2 = new Vector2(dir.x, dir.y);
        var angle = Vector2.SignedAngle(dirV2, Vector2.down);
        return angle;
    }
}

在这里插入图片描述
Canvas如下:
在这里插入图片描述

画线工具好像不能在Canvas用, 所以用的Image画线

借鉴:https://blog.csdn.net/weixin_41995872/article/details/85685367


版权声明:本文为qq_44677192原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_44677192/article/details/103894225