运行时,如果一个物体不添加Collider组件就没有办法被鼠标点击,LineRenderer由于其Mesh会随着摄像机朝向变化,如果要通过添加MeshCollider来使其能够与鼠标交互,就需要不断同步更新其MeshCollider网格。
代码参考如下:
using UnityEngine;public class LineCollider : MonoBehaviour
{[SerializeField]LineRenderer lineRenderer;[SerializeField]MeshCollider meshCollider;void Start(){SetLineMeshCollider();}void Update(){SetLineMeshCollider();}void SetLineMeshCollider(){Mesh mesh = new();lineRenderer.BakeMesh(mesh, false);//LineRenderer使用的Mesh中的顶点坐标是基于世界(World)坐标的,而MeshCollider使用的是基于自身(Object)坐标的,需要转换一下。Vector3[] vs = mesh.vertices;Transform tranLine = lineRenderer.transform;for (int i = 0; i < vs.Length; i++){vs[i] = tranLine.InverseTransformPoint(vs[i]);}mesh.SetVertices(vs);Mesh meshPre = meshCollider.sharedMesh;meshCollider.sharedMesh = mesh;//将原来使用的Mesh要销毁一下,否则会内存溢出。if (meshPre) Destroy(meshPre);}
}