Unity 根据点位生成LineRender的围墙、或是实体围墙。
原理:
LineRender 各个点位互连,调整大小材质。
实体围墙:Cube 111,如果每2个点之间生成一个长度为2点之间的距离,宽度不变,高度为围墙高度72,则会生成为一组封闭的围墙,给这个cube上一个想要的材质即可。
代码如下:
public List<Vector3> vector3s = new List<Vector3>();
public LineRenderer lineRenderer = new LineRenderer();
public GameObject cube;
public void DrawLineAndWallMode(){
if (lineRenderer != null)
{
lineRenderer.positionCount = vector3s.Count;
lineRenderer.loop = true;
}
for (int i = 0; i < vector3s.Count; i++)
{
int nextIndex = i + 1;
if (nextIndex < vector3s.Count)
{
Vector3 start = vector3s[i];
Vector3 end = vector3s[nextIndex];
CreateTransform(cube, start, end);
}
}
CreateTransform(cube, vector3s[vector3s.Count - 1], vector3s[0]);
}
public void CreateTransform(GameObject obj, Vector3 start, Vector3 end)
{
GameObject temp = GameObject.Instantiate(obj, transform);
gos.Add(temp);
temp.gameObject.SetActive(true);
float distance = Vector3.Distance(start, end);
temp.transform.localPosition = start + (end - start) / 2;
temp.transform.localScale = new Vector3(distance, 72f, 1f);
SetTransformSize(temp, start, end);
}
public void SetTransformSize(GameObject target, Vector3 start, Vector3 end)
{
Vector3 direction = end - start;
Quaternion rotation = Quaternion.LookRotation(direction, Vector3.up);
target.transform.rotation = rotation;
}