ModelAniTool.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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. private void Update()
  22. {
  23. // if (aniType == AniType.buYuan) {
  24. // if (GlobalData.buYuanSensorData.data.Count > 0) {
  25. // for (int i = 0; i < targetObjs.Length; i++) {
  26. // Debug.Log(GlobalData.buYuanSensorData.data[0].opening_degree);
  27. // }
  28. // }
  29. // }
  30. }
  31. public void FindObje()
  32. {
  33. targetObjs = new GameObject[objectCount];
  34. oriV3 = new Vector3[objectCount];
  35. for (int i = 0; i < objectCount; i++)
  36. {
  37. targetObjs[i] = this.transform.Find(moveModelName+"(Clone)").GetChild(i).gameObject;
  38. switch (aniType)
  39. {
  40. case AniType.buYuan:
  41. oriV3[i] = targetObjs[i].transform.localPosition;
  42. break;
  43. case AniType.taoKou:
  44. oriV3[i] = targetObjs[i].transform.localEulerAngles;
  45. break;
  46. }
  47. }
  48. ActionInstance._Instance.ModelAni_On += Ani_On;
  49. ActionInstance._Instance.ModelAni_Off += Ani_Off;
  50. }
  51. public void Ani_On(AniType type,float[] v3s)
  52. {
  53. if (type != aniType)
  54. {
  55. return;
  56. }
  57. if (v3s == null)
  58. {
  59. v3s = new float[targetObjs.Length];
  60. for (int i = 0; i < v3s.Length; i++)
  61. {
  62. v3s[i] = 1;
  63. }
  64. }
  65. openValues = v3s;
  66. switch (aniType)
  67. {
  68. case AniType.buYuan:
  69. for (int i = 0; i < targetObjs.Length; i++)
  70. {
  71. int tempIndex = i;
  72. targetObjs[i].transform.localPosition = oriV3[tempIndex];
  73. targetObjs[i].transform.DOLocalMoveZ(8*openValues[tempIndex], speed);
  74. //Debug.Log($"{targetObjs[i].name}:{openValues[tempIndex]}");
  75. }
  76. break;
  77. case AniType.taoKou:
  78. for (int i = 0; i < targetObjs.Length; i++)
  79. {
  80. int tempIndex = i;
  81. targetObjs[i].transform.localEulerAngles = oriV3[tempIndex];
  82. targetObjs[i].transform.DOLocalRotate(new Vector3(-45.0f,0,0) *openValues[tempIndex], speed);
  83. }
  84. break;
  85. }
  86. }
  87. public void Ani_Off()
  88. {
  89. switch (aniType)
  90. {
  91. case AniType.buYuan:
  92. for (int i = 0; i < targetObjs.Length; i++)
  93. {
  94. int tempIndex = i;
  95. targetObjs[i].transform.localPosition = oriV3[tempIndex] + new Vector3(0, 0, 8);
  96. targetObjs[i].transform.DOLocalMoveZ(0, speed);
  97. }
  98. break;
  99. case AniType.taoKou:
  100. for (int i = 0; i < targetObjs.Length; i++)
  101. {
  102. int tempIndex = i;
  103. targetObjs[i].transform.localEulerAngles = new Vector3(-45.0f,0,0)*openValues[tempIndex];
  104. targetObjs[i].transform.DOLocalRotate(Vector3.zero, speed);
  105. }
  106. break;
  107. }
  108. }
  109. }