这篇博客通过LineRenderer组件实现画图的效果
1.LineRenderer组件介绍
首先是俩个可以相互对比的面板 我们可以对照着观察
2.搭建场景
搭建过程很简单 创建一个Plane然后旋转 正对着摄像机即可
这样在Game面版中是全白效果
3.实现代码
private LineRenderer CurretLine;
public Color LineColor = Color.green ;
public float LineSize = 0.5f;
public List<Vector3> Positions = new List<Vector3>();
private void Update()
{
if (Input.GetMouseButtonDown(0))
{
GameObject go = new GameObject();//创建一个空物体
go.transform.SetParent(this.transform);//设置父子关系
CurretLine = go.AddComponent<LineRenderer>();//添加划线组件
CurretLine.endColor = LineColor;//颜色
CurretLine.endColor = LineColor;
CurretLine.startWidth = LineSize;//大小
CurretLine.endWidth = LineSize;
Vector3 StartPosition = GetScreenVec();//设置第一个点的位置
Positions.Clear();
Positions.Add(StartPosition);
CurretLine.numPositions = Positions.Count;//给点的个数赋值
CurretLine.SetPositions(Positions.ToArray());//设置点的位置
}
if (Input.GetMouseButton(0))
{
Vector3 Position = GetScreenVec();
Positions.Add(Position);//给list中添加
CurretLine.numPositions = Positions.Count;
CurretLine.SetPositions(Positions.ToArray());
}
if (Input.GetMouseButtonUp(0))
{
Positions.Clear();//清空list
}
}
Vector3 GetScreenVec()//获取屏幕坐标方法 返回一个Vector3的值
{
Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray,out hit))
{
if (hit.collider != null)
{
return hit.point;
}
return hit.point;
}
return hit.point;
}
4.代码中相关介绍
里边用到了List的相关知识 比如List.ToArray()这个方法
我大致介绍一下 这个方法是返回一个List里边的类型
比如
public List<int > go = new List<int>();//创建一个int类型的List
public int[] test; //作为接受返回的int类型数组
private void Update()
{
test = go.ToArray();//赋值
}
在unity中运行结果是
同理任何类型都可以返回
在上述实现画图的功能代码中 返回是一个Vector3[] 类型的变量
因为 CurretLine.SetPositions(Vector3[]);
下面是总的效果图
这个效果的实现可以配合UGUI中的toggle组件来修改划线的颜色和大小