unity3d UILineRenderer

本文介绍如何在Unity3D中利用UILineRenderer组件进行线条绘制,支持使用Vector2或Transform作为绘制点,结合提供的代码示例,展示了实现效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果图如下:


绘画的点,可以是Vector2也可以是Transform。

代码如下:

1.

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

namespace ExtraFoundation.Components
{
    //===============================================================================
    [DisallowMultipleComponent]
    [RequireComponent(typeof(CanvasRenderer))]
    [AddComponentMenu("UI/Effects/UILineRenderer")]
    public class UILineRenderer : MaskableGraphic
    {
        #region Public Properties
        //---------------------------------------------------------------------------
        public Texture MainTexture
        {
            get { return texture; }
            set { texture = value; }
        }

        //---------------------------------------------------------------------------
        public float LineWidth
        {
            get { return lineWidth; }
            set { lineWidth = value; }
        }

        //---------------------------------------------------------------------------
        public PositionType Space
        {
            get { return posType; }
            set { posType = value; }
        }

        //---------------------------------------------------------------------------
        public bool LineList
        {
            get { return lineList; }
            set { lineList = value; }
        }

        //---------------------------------------------------------------------------
        public bool LineCaps
        {
            get { return lineCaps; }
            set { lineCaps = value; }
        }

        //---------------------------------------------------------------------------
        public JoinType LineJoin
        {
            get { return lineJoin; }
            set { lineJoin = value; }
        }

        //---------------------------------------------------------------------------
        public override Texture mainTexture
        {
            get
            {
                return texture == null ? s_WhiteTexture : texture;
            }
        }

        //---------------------------------------------------------------------------
        /// <summary>
        /// Texture to be used.
        /// </summary>
        public Texture Texture
        {
            get
            {
                return texture;
            }

            set
            {
                if (texture == value)
                {
                    return;
                }

                texture = value;
                SetVerticesDirty();
                SetMaterialDirty();
            }
        }

        //---------------------------------------------------------------------------
        public Rect UVRect
        {
            get
            {
                return uvRect;
            }

            set
            {
                if (uvRect == value)
                {
                    return;
                }

                uvRect = value;
                SetVerticesDirty();
            }
        }

        #endregion

        #region Public Methods
        //---------------------------------------------------------------------------
        public void AddVector2Point(Vector2 pos)
        {
            Point point = new Point();
            point.Position = pos;
            point.IsTarget = false;

            points.Add(point);
        }

        //---------------------------------------------------------------------------
        public void AddTransformPoint(Transform trans)
        {
            Point point = new Point();
            point.Target = trans;
            point.IsTarget = true;

            points.Add(point);
        }

        public void InsertVector2PointAt(int index, Vector2 pos)
        {
            Point point = new Point();
            point.Position = pos;
            point.IsTarget = false;

            points.Insert(index, point);
        }

        //---------------------------------------------------------------------------
        public void RemovePointAt(int index)
        {
            if(index >= 0 && points.Count > index)
            {
                points.RemoveAt(index);
            }
        }

        //---------------------------------------------------------------------------
        public void ClearPoints()
        {
            points.Clear();
        }
        #endregion

        #region UnityMethods
        //---------------------------------------------------------------------------
        private void Update()
        {
            if (Application.isEditor && transform.position != cachePos)
            {
                cachePos = transform.position;
                OnRebuildRequested();
            }
        }
        #endregion

        #region Internal Methods
        //---------------------------------------------------------------------------
        private List<Vector2> GetTruePoins()
        {
            List<Vector2> truePoins = new List<Vector2>();

            if (posType == PositionType.Absolute)
            {
                Vector2 pOffset = transform.position;
                for (int i = 0, count = points.Count; i < count; i++)
                {
                    Point point = points[i];

                    if (point.IsTarget)
                    {
                        if (point.Target)
                        {
                            truePoins.Add((Vector2)point.Target.position - pOffset);
                 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值