It looks like depending on the camera view angle that there is kind of space in the connected points between the lines:
What I mean not connected or kind of pspaces in the connection points of the lines is marked here with blue circles:
The script:
using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine;
public class ShowMeshBounds : MonoBehaviour { public GameObject[] objectsToDraw; public GameObject prefabEffect; public Color color = Color.green;
private Vector3 v3FrontTopLeft;
private Vector3 v3FrontTopRight;
private Vector3 v3FrontBottomLeft;
private Vector3 v3FrontBottomRight;
private Vector3 v3BackTopLeft;
private Vector3 v3BackTopRight;
private Vector3 v3BackBottomLeft;
private Vector3 v3BackBottomRight;
private float counter = 0;
public bool animateLines;
public float speed = 1f;
private List<GameObject> allLines = new List<GameObject>();
private List<GameObject> instancesToMove = new List<GameObject>();
private Vector3 startPos;
private Vector3 endPos;
private void Start()
{
DrawObjects();
}
private void DrawObjects()
{
objectsToDraw = GameObject.FindGameObjectsWithTag("SpawnObject");
for (int i = 0; i < objectsToDraw.Length; i++)
{
CalcPositons(objectsToDraw[i]);
DrawBox();
for (int x = 0; x < allLines.Count; x++)
{
allLines[x].transform.parent = objectsToDraw[i].transform;
}
}
DuplicatePrefabEffects(1);
StartCoroutine(moveStuff());
}
private void DuplicatePrefabEffects(int duplicationNumber)
{
for (int i = 0; i < duplicationNumber; i++)
{
var go = Instantiate(prefabEffect);
go.tag = "Duplicated Prefab";
go.name = "Duplicated Prefab";
instancesToMove.Add(go);
}
}
void CalcPositons(GameObject objectToDrawTransform)
{
Bounds bounds = objectToDrawTransform.GetComponent<MeshFilter>().sharedMesh.bounds;
Vector3 v3Center = bounds.center;
Vector3 v3Extents = bounds.extents;
v3FrontTopLeft = new Vector3(v3Center.x - v3Extents.x, v3Center.y + v3Extents.y, v3Center.z - v3Extents.z); // Front top left corner
v3FrontTopRight = new Vector3(v3Center.x + v3Extents.x, v3Center.y + v3Extents.y, v3Center.z - v3Extents.z); // Front top right corner
v3FrontBottomLeft = new Vector3(v3Center.x - v3Extents.x, v3Center.y - v3Extents.y, v3Center.z - v3Extents.z); // Front bottom left corner
v3FrontBottomRight = new Vector3(v3Center.x + v3Extents.x, v3Center.y - v3Extents.y, v3Center.z - v3Extents.z); // Front bottom right corner
v3BackTopLeft = new Vector3(v3Center.x - v3Extents.x, v3Center.y + v3Extents.y, v3Center.z + v3Extents.z); // Back top left corner
v3BackTopRight = new Vector3(v3Center.x + v3Extents.x, v3Center.y + v3Extents.y, v3Center.z + v3Extents.z); // Back top right corner
v3BackBottomLeft = new Vector3(v3Center.x - v3Extents.x, v3Center.y - v3Extents.y, v3Center.z + v3Extents.z); // Back bottom left corner
v3BackBottomRight = new Vector3(v3Center.x + v3Extents.x, v3Center.y - v3Extents.y, v3Center.z + v3Extents.z); // Back bottom right corner
v3FrontTopLeft = objectToDrawTransform.transform.TransformPoint(v3FrontTopLeft);
v3FrontTopRight = objectToDrawTransform.transform.TransformPoint(v3FrontTopRight);
v3FrontBottomLeft = objectToDrawTransform.transform.TransformPoint(v3FrontBottomLeft);
v3FrontBottomRight = objectToDrawTransform.transform.TransformPoint(v3FrontBottomRight);
v3BackTopLeft = objectToDrawTransform.transform.TransformPoint(v3BackTopLeft);
v3BackTopRight = objectToDrawTransform.transform.TransformPoint(v3BackTopRight);
v3BackBottomLeft = objectToDrawTransform.transform.TransformPoint(v3BackBottomLeft);
v3BackBottomRight = objectToDrawTransform.transform.TransformPoint(v3BackBottomRight);
}
void DrawBox()
{
SpawnLineGenerator(v3FrontTopLeft, v3FrontTopRight, color);
SpawnLineGenerator(v3FrontTopRight, v3FrontBottomRight, color);
SpawnLineGenerator(v3FrontBottomRight, v3FrontBottomLeft, color);
SpawnLineGenerator(v3FrontBottomLeft, v3FrontTopLeft, color);
SpawnLineGenerator(v3BackTopLeft, v3BackTopRight, color);
SpawnLineGenerator(v3BackTopRight, v3BackBottomRight, color);
SpawnLineGenerator(v3BackBottomRight, v3BackBottomLeft, color);
SpawnLineGenerator(v3BackBottomLeft, v3BackTopLeft, color);
SpawnLineGenerator(v3FrontTopLeft, v3BackTopLeft, color);
SpawnLineGenerator(v3FrontTopRight, v3BackTopRight, color);
SpawnLineGenerator(v3FrontBottomRight, v3BackBottomRight, color);
SpawnLineGenerator(v3FrontBottomLeft, v3BackBottomLeft, color);
}
void SpawnLineGenerator(Vector3 start, Vector3 end, Color color)
{
GameObject myLine = new GameObject();
myLine.tag = "FrameLine";
myLine.name = "FrameLine";
myLine.AddComponent<LineRenderer>();
myLine.AddComponent<EndHolder>();
myLine.GetComponent<EndHolder>().EndVector = end;
LineRenderer lr = myLine.GetComponent<LineRenderer>();
lr.material = new Material(Shader.Find("Particles/Alpha Blended Premultiply"));
lr.startColor = color;
lr.useWorldSpace = false;
lr.endColor = color;
lr.startWidth = 0.1f;//0.03f;
lr.endWidth = 0.1f;//0.03f;
lr.SetPosition(0, start);
lr.SetPosition(1, start);
allLines.Add(myLine);
}
IEnumerator moveStuff()
{
for (int i = 0; i < allLines.Count; i++)
{
counter = 0;
endPos = allLines[i].GetComponent<EndHolder>().EndVector;
var dist = Vector3.Distance(endPos, startPos);
while (counter < 25)//dist > 0f)
{
dist = Vector3.Distance(instancesToMove[0].transform.position, endPos);
counter++;
endPos = allLines[i].GetComponent<EndHolder>().EndVector;
startPos = allLines[i].GetComponent<LineRenderer>().GetPosition(0);
instancesToMove[0].transform.position =
Vector3.MoveTowards(startPos, endPos, counter / 25f * speed);
allLines[i].GetComponent<LineRenderer>().SetPosition(1, instancesToMove[0].transform.position);//tempPos);
yield return null;
}
}
}
} What I want is to create animate the linerenderer lines and create smooth complete box