运行时,如果一个物体不添加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);
}
}