ModelAniTool.cs 3.7 KB

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