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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!