当前位置: 首页 > news >正文

wordpress用cdn文章无法更新排名优化培训

wordpress用cdn文章无法更新,排名优化培训,人力资源和社会保障部国家职业资格管理,建设摩托车官网110背景介绍 在Unity的UI系统中,绘制线条并不像在3D世界中那样直观(使用Unity自带的LineRender组件在UI中连线并不方便,它在三维中更合适)。没有内置的工具来处理这种需求。如果你希望在UI元素之间绘制连接线(例如在UI上连接不同的图标或控件)&a…

背景介绍

        在Unity的UI系统中,绘制线条并不像在3D世界中那样直观(使用Unity自带的LineRender组件在UI中连线并不方便,它在三维中更合适)。没有内置的工具来处理这种需求。如果你希望在UI元素之间绘制连接线(例如在UI上连接不同的图标或控件),需要自己编写逻辑。

         目前只适配常规ui情况

        为了满足这种需求,我封装了一个名为UILineRenderer的组件。该组件能够处理UI中的线条绘制,并且可以适应UI元素复杂的父子关系,提供线条宽度、颜色设置等功能,非常适合在UI界面中使用。

功能简介

UILineRenderer的主要功能包括:

连接两个UI元素(当然你也可以根据我的思路拓展更多).

支持自定义线条宽度与颜色

能够根据UI元素的坐标变化实时更新线条

通过鼠标位置动态调整线条的终点位置

处理UI元素复杂的父子层级关系

        

        目前仅支持连接两个Ui元素(有一个中间状态就是只添加了一个UI元素,你可以设置鼠标作为第二个临时点,然后在合适的时候设置第二个UI元素)

        但是我重写的OnPopulateMesh逻辑实际上是支持连接多个点的,你可以修改这个组件实现你的需求.

先看效果

可以连接两个UI元素

d63c2a97eb7d4e5ca5403bba7af8ad71.png

在设置了第一个UI元素的时候,可以设置鼠标位置,从而实现始终连接鼠标(这里截图导致鼠标没了)

4ac6293ab07f480db46aedde2d3da172.png

源码

using UnityEngine.UI;
using UnityEngine;
using System.Collections.Generic;[RequireComponent(typeof(CanvasRenderer))]//需要该组件才能生效
public class UILineRenderer : Graphic
{private List<Vector2> points = new List<Vector2>(); // 用于存储线条的点[SerializeField] private float lineWidth = 5f; // 线条宽度[SerializeField] private Color lineColor = Color.white; // 默认线条颜色// 每次需要重新绘制UI时调用protected override void OnPopulateMesh(VertexHelper vh){vh.Clear(); // 清空当前顶点数据// 如果没有足够的点,则不绘制任何东西if (points == null || points.Count < 2)return;// 遍历每个点,创建线段for (int i = 0; i < points.Count - 1; i++){Vector2 start = points[i];Vector2 end = points[i + 1];// 计算垂直方向的法线,使线条有宽度Vector2 direction = (end - start).normalized;Vector2 perpendicular = new Vector2(-direction.y, direction.x) * lineWidth / 2f;// 四个顶点(左下、左上、右上、右下)UIVertex vertex = UIVertex.simpleVert;vertex.color = lineColor; // 定义颜色// 左下vertex.position = new Vector3(start.x - perpendicular.x, start.y - perpendicular.y);vh.AddVert(vertex);// 左上vertex.position = new Vector3(start.x + perpendicular.x, start.y + perpendicular.y);vh.AddVert(vertex);// 右上vertex.position = new Vector3(end.x + perpendicular.x, end.y + perpendicular.y);vh.AddVert(vertex);// 右下vertex.position = new Vector3(end.x - perpendicular.x, end.y - perpendicular.y);vh.AddVert(vertex);// 添加两个三角形来组成矩形线条int index = vh.currentVertCount;vh.AddTriangle(index - 4, index - 3, index - 2);vh.AddTriangle(index - 4, index - 2, index - 1);}}/// <summary>/// 设置一个Ui元素/// 为什么要转换坐标?因为UI元素极可能不在同一个父物体下,存在错综复杂的父子关系/// 先获取UiElement世界坐标系转屏幕坐标系再转到此脚本所在的Ui坐标系/// </summary>/// <param name="uiElement"></param>public void AppendUIElement(RectTransform uiElement){Vector2 localPoint;RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform, // 当前 UILineRenderer 的 RectTransformRectTransformUtility.WorldToScreenPoint(null, uiElement.position), // UI 元素的世界坐标转换为屏幕坐标null,out localPoint // 输出的局部坐标);// 如果已经有两个点,则移除第二个点,以保持绘制最新线条if (points.Count == 2){points.RemoveAt(1);}// 添加转换后的局部坐标到点列表中points.Add(localPoint);// 标记为需要重新绘制SetVerticesDirty();}/// <summary>/// 设置鼠标位置为第二个点,此时鼠标和第一个UiElement可以构成一条线/// </summary>/// <param name="point"></param>public void SetMouse(){if (points.Count==2){points.RemoveAt(1);}var mousePostion = Input.mousePosition;RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform, mousePostion, null, out Vector2 point);points.Add(point);SetVerticesDirty();}/// <summary>/// 设置线的颜色/// </summary>/// <param name="newColor"></param>public void SetLineColor(Color newColor){lineColor = newColor;SetVerticesDirty();}/// <summary>/// 设置线的宽带/// </summary>/// <param name="width"></param>public void SetWidth(float width){lineWidth = width;SetVerticesDirty();}/// <summary>/// 重置组件/// </summary>public void ResetSelf(){points.Clear();lineColor = Color.white;lineWidth = 5f;SetVerticesDirty();}
}

示例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class Test : MonoBehaviour
{public UILineRenderer t;public Image img1;//拖拽public Image img2;private bool keyA = false;// Start is called before the first frame updatevoid Start(){t.AppendUIElement(img1.rectTransform);}// Update is called once per framevoid Update(){if (keyA==false){t.SetMouse();}if (Input.GetKeyDown(KeyCode.A)){keyA = true;t.AppendUIElement(img2.rectTransform);}}}

示例结构图

挂载了UILineRender的组件和其他UI元素一样,所以要放在下面

e8bb621fc0a64837a0a1e86c44b75206.png

http://www.ds6.com.cn/news/20717.html

相关文章:

  • 深圳做网站公武汉企业seo推广
  • wordpress多账号百度网站怎样优化排名
  • 照明灯具类企业网站软考培训机构哪家好一点
  • 网站建设一般用英文怎么说seo搜索优化是什么意思
  • 著名设计案例网站自己建网站详细流程
  • 深圳大型网站设计公司百度销售平台
  • 郑州金水区网站建设竞价sem托管公司
  • 房产中介做租单用哪个付费网站更好宁波seo外包推广公司
  • 唐山网站建设正规公司高级搜索引擎
  • 手游排行榜前十名网络游戏深圳百度seo哪家好
  • 深圳好的网站建设公司哪家好百度竞价推广账户
  • 响水做网站哪家好网络营销的新特点
  • 招聘网站套餐费用怎么做分录苏州网站建设
  • 合肥专业的房产网站建设深圳网站提升排名
  • 给公众号做头像的网站网络上市场推广
  • wordpress站点收录好网站seo查询
  • 吉林省高等级公路建设局 网站河北关键词seo排名
  • 网站建设协议 模板下载关键词搜索查找工具
  • 天津市做网站公司电子商务主要学什么内容
  • 简单网站的设计与制作怎么样引流顾客到店方法
  • SEO参与网站建设注意购买seo关键词排名优化官网
  • 广州营销型网站建设公司哪家名气大查询网站服务器
  • 新疆通汇建设集团有限公司网站可视化网页制作工具
  • 主要的网站开发技术路线网站代理公司
  • 网站如何取消限制搜索引擎抓取百度营业执照怎么办理
  • 做土地租赁买卖的网站有哪些添加友情链接的技巧
  • wordpress登陆接口网站如何做关键词优化
  • 佛山 做网站公司百度网盘破解版
  • 网站加载速度影响因素聊城优化seo
  • 珠海网站建设报价爱站网关键词查询系统