纳金网
标题:
贝塞尔平滑linerenderer 画线
[打印本页]
作者:
烟雨
时间:
2015-9-29 00:56
标题:
贝塞尔平滑linerenderer 画线
用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);
}
}
}
}
复制代码
作者:
学习deyi
时间:
2016-2-21 20:28
请问这段代码:BezierCurve bc = new BezierCurve();提示:未能找到类型或命名空间名称"BezierCurve" (是否缺少using指令或程序集引用?) 这是什么原因?
欢迎光临 纳金网 (http://go.narkii.com/club/)
Powered by Discuz! X2.5