ModelAniTool.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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. private 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(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(float[] v3s)
  42. {
  43. if (v3s == null)
  44. {
  45. v3s = new float[targetObjs.Length];
  46. for (int i = 0; i < v3s.Length; i++)
  47. {
  48. v3s[i] = 1;
  49. }
  50. }
  51. openValues = v3s;
  52. switch (aniType)
  53. {
  54. case AniType.buYuan:
  55. for (int i = 0; i < targetObjs.Length; i++)
  56. {
  57. int tempIndex = i;
  58. targetObjs[i].transform.localPosition = oriV3[tempIndex];
  59. targetObjs[i].transform.DOLocalMoveY(8*openValues[tempIndex], speed);
  60. }
  61. break;
  62. case AniType.taoKou:
  63. for (int i = 0; i < targetObjs.Length; i++)
  64. {
  65. int tempIndex = i;
  66. targetObjs[i].transform.localEulerAngles = oriV3[tempIndex];
  67. targetObjs[i].transform.DOLocalRotate(new Vector3(-45.0f,0,0) *openValues[tempIndex], speed);
  68. }
  69. break;
  70. }
  71. }
  72. public void Ani_Off()
  73. {
  74. switch (aniType)
  75. {
  76. case AniType.buYuan:
  77. for (int i = 0; i < targetObjs.Length; i++)
  78. {
  79. int tempIndex = i;
  80. targetObjs[i].transform.localPosition = oriV3[tempIndex] + new Vector3(0, 0, 8);
  81. targetObjs[i].transform.DOLocalMoveY(0, speed);
  82. }
  83. break;
  84. case AniType.taoKou:
  85. for (int i = 0; i < targetObjs.Length; i++)
  86. {
  87. int tempIndex = i;
  88. targetObjs[i].transform.localEulerAngles = new Vector3(-45.0f,0,0)*openValues[tempIndex];
  89. targetObjs[i].transform.DOLocalRotate(Vector3.zero, speed);
  90. }
  91. break;
  92. }
  93. }
  94. }