本文实例为大家分享了UGUI绘制动态曲线的具体代码,供大家参考,具体内容如下
为深圳等地区用户提供了全套网页设计制作服务,及深圳网站建设行业解决方案。主营业务为网站设计制作、网站建设、深圳网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
前言
等有空再补详细说明,先上代码。看官自行阅读
代码
UICurveData 类,用于存放点数据的基础结构。
public class UICurveData { #region [Fields] public ListPostion = new List (); public Color Ccolor; public float Thickness = 1; #endregion #region [PublicTools] public void Addpos(float varX, float varY) { Addpos(new Vector2(varX, varY)); } public void Addpos(Vector2 varV2) { Postion.Add(varV2); } #endregion }
UICurve 负责构建顶点数据,mesh。
public class UICurve : MaskableGraphic { #region [Fields] private DictionarymCurveData = new Dictionary (); #endregion #region [Inherit] protected override void OnPopulateMesh(VertexHelper varVerHeler) { varVerHeler.Clear(); foreach (var tempKvp in mCurveData) { var tempUICurveData = tempKvp.Value; if (tempUICurveData.Postion.Count < 2) { continue; } for (int i = 1; i < tempUICurveData.Postion.Count; i++) { UIVertex[] verts = new UIVertex[4]; float x1 = tempUICurveData.Postion[i - 1].x; float y1 = tempUICurveData.Postion[i - 1].y; float x2 = tempUICurveData.Postion[i].x; float y2 = tempUICurveData.Postion[i].y; float xd = (y2 - y1) / Mathf.Sqrt(Mathf.Pow(x2 - x1, 2) * Mathf.Pow(y2 - y1, 2)) * tempKvp.Value.Thickness / 2; float yd = (x2 - x1) / Mathf.Sqrt(Mathf.Pow(x2 - x1, 2) * Mathf.Pow(y2 - y1, 2)) * tempKvp.Value.Thickness / 2; int idx = 0; verts[idx].position = new Vector3(tempUICurveData.Postion[i - 1].x - xd, tempUICurveData.Postion[i - 1].y + yd); verts[idx].color = tempUICurveData.Ccolor; verts[idx].uv0 = Vector2.zero; idx++; verts[idx].position = new Vector3(tempUICurveData.Postion[i].x - xd, tempUICurveData.Postion[i].y + yd); verts[idx].color = tempUICurveData.Ccolor; verts[idx].uv0 = Vector2.zero; idx++; verts[idx].position = new Vector3(tempUICurveData.Postion[i].x + xd, tempUICurveData.Postion[i].y - yd); verts[idx].color = tempUICurveData.Ccolor; verts[idx].uv0 = Vector2.zero; idx++; verts[idx].position = new Vector3(tempUICurveData.Postion[i - 1].x + xd, tempUICurveData.Postion[i - 1].y - yd); verts[idx].color = tempUICurveData.Ccolor; verts[idx].uv0 = Vector2.zero; varVerHeler.AddUIVertexQuad(verts); } } } #endregion #region [PublicTools] public void AddCurveData(int varID, UICurveData varCurveData) { mCurveData.Add(varID, varCurveData); SetAllDirty(); } public void Clear() { mCurveData.Clear(); SetAllDirty(); } public void RemovePointIDs(params int[] varRemovepoints) { List tempL = new List (); tempL.AddRange(varRemovepoints); RemovePointIDs(tempL); } public void RemovePointIDs(List varRemovePoints) { foreach (var i in varRemovePoints) { if (!mCurveData.ContainsKey(i)) continue; mCurveData.Remove(i); } SetAllDirty(); } #endregion }
测试使用
public class TestCurve : MonoBehaviour { void Start() { var tempCurve = this.gameObject.AddComponent(); UICurveData tempcd = new UICurveData(); tempcd.Ccolor = Color.yellow; tempcd.Thickness = 2; for (int i = 0; i < 360; i++) { tempcd.Addpos(i * 2,(float)Mathf.Cos(i)); } tempCurve.AddCurveData(1,tempcd); } }
将该脚本挂在 Canvas 上,运行会看到
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持创新互联。