123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- using UnityEngine;
- using System.Collections.Generic;
- using System;
- [Serializable]
- public class SubMeshes
- {
- public MeshRenderer meshRenderer;
- public Vector3 originalPosition;
- public Vector3 explodedPosition;
- }
- public class ThreeDModelFunctions : MonoBehaviour
- {
- #region Variables
- public List<SubMeshes> childMeshRenderers;
- bool isInExplodedView = false;
- public float explosionSpeed = 0.1f;
- bool isMoving = false;
- #endregion
- #region UnityFunctions
- private void Awake()
- {
- childMeshRenderers = new List<SubMeshes>();
- foreach (var item in GetComponentsInChildren<MeshRenderer>())
- {
- SubMeshes mesh = new SubMeshes();
- mesh.meshRenderer = item;
- mesh.originalPosition = item.transform.position;
- mesh.explodedPosition = item.bounds.center * 10;
- childMeshRenderers.Add(mesh);
- }
- }
- private void Update()
- {
- if (isMoving)
- {
- if (isInExplodedView)
- {
- foreach (var item in childMeshRenderers)
- {
- item.meshRenderer.transform.position = Vector3.Lerp(item.meshRenderer.transform.position,
- item.explodedPosition, explosionSpeed);
- if (Vector3.Distance(item.meshRenderer.transform.position, item.explodedPosition) < 0.001f)
- {
- isMoving = false;
- }
- }
- }
- else
- {
- foreach (var item in childMeshRenderers)
- {
- item.meshRenderer.transform.position = Vector3.Lerp(item.meshRenderer.transform.position,
- item.originalPosition, explosionSpeed);
- if (Vector3.Distance(item.meshRenderer.transform.position, item.originalPosition) < 0.001f)
- {
- isMoving = false;
- }
- }
- }
- }
- }
- #endregion
- #region CustomFunctions
- public void ToggleExplodedView()
- {
- if (isInExplodedView)
- {
- isInExplodedView = false;
- isMoving = true;
- }
- else
- {
- isInExplodedView = true;
- isMoving = true;
- }
- }
- #endregion
- }
|