Unity 用Image做一个折线图

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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity中建立一个可拖动的折线图按钮,你可以按照以下步骤进行操作: 1. 首先,创建一个空对象作为折线图的容器。你可以通过鼠标右键点击Hierarchy面板,在弹出菜单中选择"Create Empty"来创建一个空对象。 2. 在该容器对象下创建一个UI元素,用作折线图的背景。你可以使用RectTransform组件来设置UI元素的位置和大小,确保它可以容纳整个折线图。 3. 在背景UI元素上添加一个Image组件或RawImage组件,以便显示折线图的背景图像。 4. 接下来,在该容器对象下创建一个UI元素,作为代表按钮的图像。你可以使用RectTransform组件设置按钮图像的位置和大小。 5. 添加一个拖动脚本到按钮图像上。你可以编写自定义的拖动脚本,或者使用Unity的自带脚本。使用脚本来实现按钮图像的拖动功能。 6. 在按钮图像上添加一个Button组件,用来处理按钮的点击事件。你可以通过在脚本中编写相应的方法,来处理按钮的点击事件。 7. 当按钮被点击时,你可以在脚本中根据具体的需求,更新折线图的数据和显示。 8. 根据你的需要,你可以进一步改进折线图的外观和交互性。通过添加适当的UI元素和脚本,来实现折线图的标签、刻度、动画等功能。 通过以上步骤,你可以在Unity中建立一个可拖动的折线图按钮。你可以根据具体的需求进行调整和改进,来实现更丰富的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值