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

xiaoxiao2021-02-28  134

因为项目原因,需要用到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); } }

转载请注明原文地址: https://www.6miu.com/read-68883.html

最新回复(0)