zoukankan      html  css  js  c++  java
  • Unity LineRenderer制作画版

    Source:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class AtwalPaint : MonoBehaviour {
        public Material currentMaterial;
    
        private Color paintColor = Color.red;
        private float paintSize = 0.1f;
        private bool isPress = false;
        private LineRenderer lineRenderer;
        private List<Vector3> positions = new List<Vector3>();
        private int lineCount = 0;
    
        private void Update()
        {
            if (Input.GetMouseButtonDown(0))
            {
                isPress = true;
                GameObject go = new GameObject("LineRenderer_" + lineCount);
                go.transform.parent = gameObject.transform;
                lineRenderer = go.AddComponent<LineRenderer>();
                lineRenderer.startColor = paintColor;
                lineRenderer.endColor = paintColor;
                lineRenderer.startWidth = paintSize;
                lineRenderer.endWidth = paintSize;
                lineRenderer.material = currentMaterial;
                lineRenderer.numCapVertices = 5;
                lineRenderer.numCornerVertices = 5;
                lineCount++;
                AddPosition();
            }
    
            if (isPress)
            {
                AddPosition();
            }
    
            if (Input.GetMouseButtonUp(0))
            {
                lineRenderer = null;
                positions.Clear();
                isPress = false;
            }
        }
    
        void AddPosition()
        {
            Vector3 position = GetMousePoint();
            if (positions.Count > 0)
            {
                if (Vector3.Distance(position, positions[positions.Count - 1]) < 0.1f)
                {
                    return;
                }
            }
            position.z = -0.02f * lineCount;
            positions.Add(position);
            lineRenderer.positionCount = positions.Count;
            lineRenderer.SetPositions(positions.ToArray());
        }
    
        Vector3 GetMousePoint()
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            bool isCollider = Physics.Raycast(ray, out hit);
            if (isCollider)
            {
                return hit.point;
            }
            return Vector3.zero;
        }
    
    
        #region color
        public void OnRedColorChange(bool isOn)
        {
            if (isOn)
            {
                paintColor = Color.red;
            }
        }
        public void OnGreenColorChange(bool isOn)
        {
            if (isOn)
            {
                paintColor = Color.green;
            }
        }
        public void OnBlueColorChange(bool isOn)
        {
            if (isOn)
            {
                paintColor = Color.blue;
            }
        }
        #endregion
    
        #region size
        public void On1SizeChange(bool isOn)
        {
            if (isOn)
            {
                paintSize = 0.1f;
            }
        }
        public void On2SizeChange(bool isOn)
        {
            if (isOn)
            {
                paintSize = 0.2f;
            }
        }
        public void On4SizeChange(bool isOn)
        {
            if (isOn)
            {
                paintSize = 0.4f;
            }
        }
        #endregion
    }
  • 相关阅读:
    数字全排列
    Nginx与HAProxy的区别
    Ceph RBD 的实现原理与常规操作
    pxc挂了一个节点怎么办
    AWTK javascript绑定原理
    雷电网络更新:迈向 Ithaca
    Chorus.one:Loom Network 项目前景 & 质押收益
    隐密交易的到来:深入 AZTEC 协议
    技术开发中一些名词解释
    技术开发中一些名词解释
  • 原文地址:https://www.cnblogs.com/lurenjiashuo/p/unity-LineRenderer-paint.html
Copyright © 2011-2022 走看看