LineRenderer在unity5.5中的使用,新手使用攻略

来源:互联网 发布:淘宝保健品标题怎么改 编辑:程序博客网 时间:2024/06/18 10:41

因为项目原因,需要用到LineRenderer,所以学习了这方面的知识。

最方便的,当然是去看官方文档,或者unity圣典,但是还有一篇博客,对LineRenderer的使用做出了简洁的介绍,尤其是举例,对我这种小白非常的友好。

点击打开链接

当然,这篇文章介绍的不够全面,而且有些方法已经被弃用,如果你想要了解最新的和最全面的关于LineRenderer的知识,那么推荐你去看SiKi的课程,很短,但是挺全面。

点击打开链接

最后,当然是附上自己的代码啦。




using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class Floor : Interactable
{
public List<LineRenderer> lines;//定义一个LineRenderer的数组
private LineRenderer curRender;//当前的LineRenderer
private GameObject line;
private Vector3 StartPos;
private Vector3 EndPos;


void Start () {

}
private LineRenderer GenerateLine(Vector3 startPoint,Vector3 endPoint)//画线的函数
{
line = new GameObject("Line");//定义一个新的游戏物体,叫做Line
//line.transform.SetParent(transform);//将他作为当前物体的子物体
line.AddComponent<Line>();//给他添加一个Line方法
LineRenderer lineRender = line.AddComponent<LineRenderer>();//定义一个lineRender来接收line添加LineRenderer组件
lineRender.numPositions = 2;//每条线两个点
lineRender.SetPosition(0, startPoint);//第一个点是开始点
lineRender.SetPosition(1, endPoint);//第二个点是结束点
lineRender.startWidth = 0.1f;
lineRender.endWidth = 0.1f;


StartPos = startPoint;
return lineRender;//返回lineRenderer
}
private void RotateLine(ref LineRenderer line, Vector3 destPoint)
{
line.SetPosition(1, destPoint);
}
// Update is called once per frame
void FixedUpdate () {


}
public override void OnPointerDragBegin(Vector3 pos)
{
curRender = GenerateLine(pos, pos);
lines.Add(curRender);

}
public override void OnPointerDragging(Vector3 pos)
{
RotateLine(ref curRender, pos);
EndPos = pos;
//设置碰撞器大小和位置

}

public override void OnPointerUp(Vector3 pos)
{
Debug.Log("start:"+StartPos);
Debug.Log("end:"+EndPos);
var boxcollider = line.AddComponent<BoxCollider>();
addColliderToLine(ref boxcollider, StartPos, EndPos);
}


private void addColliderToLine(ref BoxCollider col,Vector3 startPos,Vector3 endPos)
{
//BoxCollider col = new GameObject("Collider").AddComponent<BoxCollider>();

col.transform.parent = curRender.transform; // Collider is added as child object of line

float lineLength = Vector3.Distance(startPos, endPos); // length of line

col.size = new Vector3(lineLength, 0.1f, 1f); // size of collider is set where X is length of line, Y is width of line, Z will be set as per requirement

//Vector3 midPoint = (startPos + endPos) / 2;
Vector3 midPoint=new Vector3((startPos.x+endPos.x)/2,startPos.y, (startPos.z + endPos.z) / 2);
col.transform.position = midPoint; // setting position of collider object
Debug.Log(midPoint);
// Following lines calculate the angle between startPos and endPos

float angle = (Mathf.Abs(startPos.y - endPos.y) / Mathf.Abs(startPos.x - endPos.x));

if ((startPos.y < endPos.y && startPos.x > endPos.x) || (endPos.y < startPos.y && endPos.x > startPos.x))
{
angle *= -1;
}
angle = Mathf.Rad2Deg * Mathf.Atan(angle);
col.transform.Rotate(0, 0, angle);
}
}


0 1
原创粉丝点击