unity 通过Image画线

/// <summary>
/// 初始化线
/// </summary>
/// <param name="vStartPoint">起始点</param>
/// <param name="vEndPoint">终点</param>
private void InitLine(GameObject vStartPoint, GameObject vEndPoint)
{
    CreateLine(vStartPoint.transform.position, vEndPoint.transform.position);
}


/// <summary>
/// 根据坐标画一条直线
/// </summary>
/// <param name="vStart"></param>
/// <param name="vEnd"></param>
private void CreateLine(Vector2 vStart, Vector2 vEnd)
{
    GameObject line = GameLoadTools.InstantiatePrefab(mUIView.LineOBj, mUIView.transform);
    RectTransform vRect = line.GetComponent<RectTransform>();

    vRect.position = GetBetweenPoint(vStart, vEnd);
    vRect.rotation = Quaternion.AngleAxis(-GetAngle(vStart, vEnd), Vector3.forward);

    var vDistance = Vector2.Distance(vEnd, vStart);
    vRect.sizeDelta = new Vector2(5, Math.Max(1, vDistance));
    
    line.transform.SetAsFirstSibling();
}

/// <summary>
/// 返回线的旋转
/// </summary>
/// <param name="vStart"></param>
/// <param name="vEnd"></param>
/// <returns></returns>
private float GetAngle(Vector2 vStart, Vector2 vEnd)
{
    var vDir = vStart - vEnd;
    var vDirV2 = new Vector2(vDir.x, vDir.y);
    var vAngle = Vector2.SignedAngle(vDirV2, Vector2.down);
    return vAngle;
}

/// <summary>
/// 返回线的坐标
/// </summary>
/// <param name="vStart"></param>
/// <param name="vEnd"></param>
/// <returns></returns>
private Vector2 GetBetweenPoint(Vector2 vStart, Vector2 vEnd)
{
    return vStart + (vEnd - vStart) / 2f;
}

 

posted @ 2023-08-31 20:05  色色先生  阅读(81)  评论(0编辑  收藏  举报