Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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(moveLines());
- }
- 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()
- {
- Front();
- LeftRight();
- Back();
- }
- 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.numCapVertices = 5;
- lr.SetPosition(0, start);
- lr.SetPosition(1, start);
- allLines.Add(myLine);
- }
- IEnumerator moveLines()
- {
- 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 = 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;
- }
- }
- }
- private void Front()
- {
- SpawnLineGenerator(v3FrontTopLeft, v3FrontTopRight, color);
- SpawnLineGenerator(v3FrontTopRight, v3FrontBottomRight, color);
- SpawnLineGenerator(v3FrontBottomRight, v3FrontBottomLeft, color);
- SpawnLineGenerator(v3FrontBottomLeft, v3FrontTopLeft, color);
- }
- private void Back()
- {
- SpawnLineGenerator(v3BackTopLeft, v3BackTopRight, color);
- SpawnLineGenerator(v3BackTopRight, v3BackBottomRight, color);
- SpawnLineGenerator(v3BackBottomRight, v3BackBottomLeft, color);
- SpawnLineGenerator(v3BackBottomLeft, v3BackTopLeft, color);
- SpawnLineGenerator(v3BackTopLeft, v3BackBottomLeft, color);
- SpawnLineGenerator(v3BackBottomLeft, v3FrontBottomLeft, color);
- SpawnLineGenerator(v3FrontBottomLeft, v3FrontBottomRight, color);
- SpawnLineGenerator(v3FrontBottomRight, v3BackBottomRight, color);
- SpawnLineGenerator(v3BackBottomRight,v3BackTopRight , color);
- SpawnLineGenerator(v3BackTopRight, v3FrontTopRight, color);
- }
- private void LeftRight()
- {
- SpawnLineGenerator(v3FrontTopLeft, v3BackTopLeft, color);
- //SpawnLineGenerator(v3FrontBottomLeft, v3BackBottomLeft, color);
- //SpawnLineGenerator(v3FrontBottomRight, v3BackBottomRight, color);
- //SpawnLineGenerator(v3FrontTopRight, v3BackTopRight, color);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement