- 最后登录
- 2021-7-6
- 注册时间
- 2012-12-27
- 阅读权限
- 90
- 积分
- 76145
 
- 纳金币
- 53488
- 精华
- 316
|
用linerenderer手指以后快速画线时 会有破线的现象 我根据网上的贝塞尔曲线资料 自己修改下 使画出来的线更平滑 废话不说 直接上代码- using UnityEngine;
- using System.Collections;
- using System.Collections.Generic;
- public class DrawLine : MonoBehaviour {
- // Use this for initialization
- private List<Vector3> list;
- private bool IsDraw = false;
- private LineRenderer lineRenderer;
- void Start () {
- lineRenderer = GetComponent<LineRenderer>();
- }
-
- // Update is called once per frame
- void Update()
- {
- if (Input.GetMouseButtonDown(0))
- {
- if (list == null)
- list = new List<Vector3>();
- list.Clear();
- IsDraw = true;
- lineRenderer.SetVertexCount(0);
- }
- if (Input.GetMouseButton(0))//记录划线点
- {
- Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
- RaycastHit hit;
- if (Physics.Raycast(ray, out hit, 1000))
- {
- Vector3 point = hit.point;
- if (!hit.collider.name.Equals("Terrain"))
- {
- return;
- }
- list.Add(point);
- print(list.Count);
- }
- }
- if (Input.GetMouseButtonUp(0))
- {
- IsDraw = false;
- }
- drawBezierCurve();
- // drawInputPointCurve();
- }
- private void drawBezierCurve()
- {
- if(IsDraw&&list.Count>0){
- List<Vector3> bcList;
- BezierCurve bc= new BezierCurve();
- bcList = bc.CreateCurve(list);// 通过贝塞尔曲线 平滑划线点
- lineRenderer.SetVertexCount(bcList.Count); //maxVertices < 65536 && maxIndices < 65536*3 点的密度 可以降低 太多会超过可设顶点数
- for (int i = 0; i < bcList.Count; i++)
- {
- Vector3 v = bcList[i];
- v += new Vector3(0, 0.5f, 0);
- lineRenderer.SetPosition(i, v);
- }
- }
- }
- private void drawInputPointCurve()
- {
- if (IsDraw && list.Count > 0)
- {
- lineRenderer.SetVertexCount(list.Count);
- for (int i = 0; i < list.Count; i++)
- {
- Vector3 v = list[i];
- v += new Vector3(0, 0.5f, 0);
- lineRenderer.SetPosition(i, v);
- }
- }
- }
- }
复制代码 |
|