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; }