ModelAniTool.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using DG.Tweening;
  6. using UnityEngine.Serialization;
  7. public enum AniType
  8. {
  9. buYuan,
  10. taoKou
  11. }
  12. public class ModelAniTool : MonoBehaviour
  13. {
  14. public string moveModelName;
  15. public int objectCount=0;
  16. private Vector3[] oriV3;
  17. public float speed=2.0f;
  18. public GameObject[] targetObjs;
  19. public AniType aniType;
  20. private float[] openValues;
  21. public void FindObje()
  22. {
  23. targetObjs = new GameObject[objectCount];
  24. oriV3 = new Vector3[objectCount];
  25. for (int i = 0; i < objectCount; i++)
  26. {
  27. targetObjs[i] = this.transform.Find(moveModelName+"(Clone)").GetChild(objectCount-1-i).gameObject;
  28. switch (aniType)
  29. {
  30. case AniType.buYuan:
  31. oriV3[i] = targetObjs[i].transform.localPosition;
  32. break;
  33. case AniType.taoKou:
  34. oriV3[i] = targetObjs[i].transform.localEulerAngles;
  35. break;
  36. }
  37. }
  38. ActionInstance._Instance.ModelAni_On += Ani_On;
  39. ActionInstance._Instance.ModelAni_Off += Ani_Off;
  40. }
  41. public void Ani_On(AniType type,float[] v3s)
  42. {
  43. if (type != aniType)
  44. {
  45. return;
  46. }
  47. if (v3s == null)
  48. {
  49. v3s = new float[targetObjs.Length];
  50. for (int i = 0; i < v3s.Length; i++)
  51. {
  52. v3s[i] = 1;
  53. }
  54. }
  55. openValues = v3s;
  56. switch (aniType)
  57. {
  58. case AniType.buYuan:
  59. for (int i = 0; i < targetObjs.Length; i++)
  60. {
  61. int tempIndex = i;
  62. targetObjs[i].transform.localPosition = oriV3[tempIndex];
  63. targetObjs[i].transform.DOLocalMoveZ(8*openValues[tempIndex], speed);
  64. //Debug.Log($"{targetObjs[i].name}:{openValues[tempIndex]}");
  65. }
  66. break;
  67. case AniType.taoKou:
  68. for (int i = 0; i < targetObjs.Length; i++)
  69. {
  70. int tempIndex = i;
  71. targetObjs[i].transform.localEulerAngles = oriV3[tempIndex];
  72. targetObjs[i].transform.DOLocalRotate(new Vector3(-45.0f,0,0) *openValues[tempIndex], speed);
  73. }
  74. break;
  75. }
  76. }
  77. public void Ani_Off()
  78. {
  79. switch (aniType)
  80. {
  81. case AniType.buYuan:
  82. for (int i = 0; i < targetObjs.Length; i++)
  83. {
  84. int tempIndex = i;
  85. targetObjs[i].transform.localPosition = oriV3[tempIndex] + new Vector3(0, 0, 8);
  86. targetObjs[i].transform.DOLocalMoveZ(0, speed);
  87. }
  88. break;
  89. case AniType.taoKou:
  90. for (int i = 0; i < targetObjs.Length; i++)
  91. {
  92. int tempIndex = i;
  93. targetObjs[i].transform.localEulerAngles = new Vector3(-45.0f,0,0)*openValues[tempIndex];
  94. targetObjs[i].transform.DOLocalRotate(Vector3.zero, speed);
  95. }
  96. break;
  97. }
  98. }
  99. }