Unity在UI上绘制直线

这篇博客介绍了一个名为`UILineFactory`的Unity脚本,该脚本用于根据给定的起始和结束点动态创建Image类型的UI线条。在Start方法中,它通过设置RectTransform组件的属性来定位和旋转线条,并调整其大小以匹配两点间的距离。这个过程涉及到Unity的预制作(Prefab)、游戏对象实例化、RectTransform的锚点和尺寸设置以及角度计算。
摘要由CSDN通过智能技术生成

prefabUILine为Image的预制作

 代码

using UnityEngine;

public class UILineFactory : MonoBehaviour
{
    public RectTransform rtUIParent;
    public GameObject prefabUILine;

    void Start()
    {
        Vector2 startPosition = new Vector2(rtUIParent.rect.width * 0.2f, rtUIParent.rect.height * 0.2f);
        Vector2 endPosition = new Vector2(rtUIParent.rect.width * 0.8f, rtUIParent.rect.height * 0.5f);
        CreateLine(startPosition, endPosition);
    }

    void CreateLine(Vector2 startPosition, Vector2 endPosition)
    {
        GameObject line = Instantiate(prefabUILine);
        line.name = "UILine";
        line.transform.SetParent(rtUIParent.transform);

        var heading = endPosition - startPosition;
        var distance = heading.magnitude;
        var direction = heading / distance;

        RectTransform rtLine = line.GetComponent<RectTransform>();

        //对齐左下角
        rtLine.anchorMin = Vector2.zero;
        rtLine.anchorMax = Vector2.zero;

        //计算线条位置
        Vector2 centerPos = new Vector2(startPosition.x + endPosition.x, startPosition.y + endPosition.y) / 2;
        rtLine.anchoredPosition = centerPos;

        //计算线条角度
        float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
        line.transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);

        //yf th
        rtLine.sizeDelta = new Vector2(distance, 5.0f);
    }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值