Unity使⽤UGUI的Image在UI两个对象之间画线

Unity使⽤UGUI的Image在UI两个对象之间画线

/// <summary>

/// 创建⼀条两点之间的线

/// </summary>

/// <param name="start">起始点</param>

/// <param name="end">结束点</param>

public void CreateLine(Vector2 start, Vector2 end)

{

//实例化需要显⽰的线段图⽚pfb

GameObject line =Instantiate(m_LinePfb);

line.transform.SetParent(mapContent);

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

//设置位置和⾓度

rect.localPosition =GetBetweenPoint(start, end);

rect.localRotation = Quaternion.AngleAxis(-GetAngle(start,end), Vector3.forward);

//设置线段图⽚⼤⼩

var distance = Vector2.Distance(end, start);

rect.sizeDelta =new Vector2(5, Math.Max(1, distance));

//调整显⽰层级

line.transform.SetAsFirstSibling();

}

/// <summary>

/// 获取两个坐标点之间的夹⾓

/// </summary>

/// <param name="start">起始点</param>

/// <param name="end">结束点</param>

/// <returns></returns>

public float GetAngle(Vector2 start, Vector2 end)

{

var dir = end - start;

var dirV2 =new Vector2(dir.x, dir.y);

var angle = Vector2.SignedAngle(dirV2, Vector2.down);

return angle;

}

/// <summary>

/// 获取上下相邻两个坐标点中间的坐标点

/// </summary>

/// <param name="start">起始点</param>

/// <param name="end">结束点</param>

/// <returns></returns>

private Vector2 GetBetweenPoint(Vector2 start, Vector2 end)

{

//两点之间垂直距离

float distance = end.y - start.y;

float y = start.y + distance /2;

float x = start.x;

if(start.x != end.x)

{

//斜率值

float k =(end.y - start.y)/(end.x - start.x);

//根据公式 y = kx + b ,求b

float b = start.y - k * start.x;

x =(y - b)/ k;

}

Vector2 point =new Vector2(x, y);

return point;

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值