ModelExplodedViewTool.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. using UnityEngine;
  2. using System.Collections.Generic;
  3. using System;
  4. [Serializable]
  5. public class SubMeshes
  6. {
  7. public MeshRenderer meshRenderer;
  8. public Vector3 originalPosition;
  9. public Vector3 explodedPosition;
  10. }
  11. public class ThreeDModelFunctions : MonoBehaviour
  12. {
  13. #region Variables
  14. public List<SubMeshes> childMeshRenderers;
  15. bool isInExplodedView = false;
  16. public float explosionSpeed = 0.1f;
  17. bool isMoving = false;
  18. #endregion
  19. #region UnityFunctions
  20. private void Awake()
  21. {
  22. childMeshRenderers = new List<SubMeshes>();
  23. foreach (var item in GetComponentsInChildren<MeshRenderer>())
  24. {
  25. SubMeshes mesh = new SubMeshes();
  26. mesh.meshRenderer = item;
  27. mesh.originalPosition = item.transform.position;
  28. mesh.explodedPosition = item.bounds.center * 10;
  29. childMeshRenderers.Add(mesh);
  30. }
  31. }
  32. private void Update()
  33. {
  34. if (isMoving)
  35. {
  36. if (isInExplodedView)
  37. {
  38. foreach (var item in childMeshRenderers)
  39. {
  40. item.meshRenderer.transform.position = Vector3.Lerp(item.meshRenderer.transform.position,
  41. item.explodedPosition, explosionSpeed);
  42. if (Vector3.Distance(item.meshRenderer.transform.position, item.explodedPosition) < 0.001f)
  43. {
  44. isMoving = false;
  45. }
  46. }
  47. }
  48. else
  49. {
  50. foreach (var item in childMeshRenderers)
  51. {
  52. item.meshRenderer.transform.position = Vector3.Lerp(item.meshRenderer.transform.position,
  53. item.originalPosition, explosionSpeed);
  54. if (Vector3.Distance(item.meshRenderer.transform.position, item.originalPosition) < 0.001f)
  55. {
  56. isMoving = false;
  57. }
  58. }
  59. }
  60. }
  61. }
  62. #endregion
  63. #region CustomFunctions
  64. public void ToggleExplodedView()
  65. {
  66. if (isInExplodedView)
  67. {
  68. isInExplodedView = false;
  69. isMoving = true;
  70. }
  71. else
  72. {
  73. isInExplodedView = true;
  74. isMoving = true;
  75. }
  76. }
  77. #endregion
  78. }