这两天做了项目正好需要用到画图功能,然后就小研究了一下,虽然不是很复杂,记录一下
我采用的是Unity自带的那个LineRender组件,然后我们简单学习了解一下这个组件,其中最重要的就是我们设置Positions每个点位置然后连接,我们可以设置材质球,也可以设置Color,但是我在做的过程中,给这个颜色赋值好像不起作用,
首先我们要启用Use World Space:(如果不启用的话渲染不到屏幕上,不启用我赋值的这些点会跟随我们的LineRender坐标移动)
Loop如果启用的话,会将我们设置的点的最后一个点和第一点自动连接起来,
好了解完这些我们就上代码吧:
最重要的就是我们要将鼠标的坐标点转化成世界点然后再赋值给Positions
1、画线
if (Input.GetMouseButtonDown(0))
{
clone = Instantiate(tf, tf.transform.position, transform.rotation);
line = clone.GetComponent<LineRenderer>();
line.startColor = Color.white;
line.endColor = Color.white;
line.startWidth = 0.1f;
line.endWidth = 0.1f;
i = 0;
}
if (Input.GetMouseButton(0))
{
i++;
line.positionCount = i;
line.SetPosition(i - 1, camera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 15)));
}
2、画三角形
其实画三角形最重要的是我们要设置三个点,起始点我们肯定知道,最后一个点我们肯定也知道,然后我们算中那个点就可以了,比如说直角三角形,那我们中间的那个点的X轴肯定和第一个点的X轴相等,中间的那个点的Y轴肯定和最后一个点的Y轴相等,所以我们就可以求出中那个点坐标;
if (Input.GetMouseButtonDown(0))
{
startPos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 15);
clone = Instantiate(tf, tf.transform.position, Quaternion.identity);
line = clone.GetComponent<LineRenderer>();
line.startColor = Color.black;
line.endColor = Color.red;
line.startWidth = 0.1f;
line.endWidth = 0.1f;
}
if (Input.GetMouseButton(0))
{
endPos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 15);
Pos = new Vector3(startPos.x, endPos.y, 15);
line.positionCount = 3;
line.SetPosition(0, Camera.main.ScreenToWorldPoint(startPos));
line.SetPosition(1, Camera.main.ScreenToWorldPoint(Pos));
line.SetPosition(2, Camera.main.ScreenToWorldPoint(endPos));
}
还有一种三角形式等腰三角形,也是一样的思路找规律也可以算出中间的那个点
if (Input.GetMouseButtonDown(0))
{
startPos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 15);
clone = Instantiate(tf, tf.transform.position, Quaternion.identity);
line = clone.GetComponent<LineRenderer>();
line.startColor = Color.black;
line.endColor = Color.red;
line.startWidth = 0.1f;
line.endWidth = 0.1f;
}
if (Input.GetMouseButton(0))
{
endPos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 15);
//Pos = new Vector3(startPos.x, endPos.y, 15);
float a = endPos.x - startPos.x;
Vector3 p = new Vector3(startPos.x, endPos.y, 15);
float a1 = p.x - a;
Pos = new Vector3(a1, endPos.y, 15);
line.positionCount = 3;
line.SetPosition(0, Camera.main.ScreenToWorldPoint(startPos));
line.SetPosition(1, Camera.main.ScreenToWorldPoint(Pos));
line.SetPosition(2, Camera.main.ScreenToWorldPoint(endPos));
}
3、画圆,道理也一样,我们知道起始点(a)最后一点(b)那么我们就可以算出圆的半径,和圆心所在的位置,
总结我们使用LineRender画线主要是将各个点设置到Position中,如果修改颜色可以修改LineRender中材质的颜色,这次只是把基本的功能实现了,我们还可以加一些更丰富的功能