SceneDecoration.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using Fort23.Core;
  2. using Fort23.UTool;
  3. using UnityEngine;
  4. namespace GameLogic.Combat.CombatTool.SceneTool
  5. {
  6. public class SceneDecoration : CObject
  7. {
  8. private static readonly int RongJieValue = Shader.PropertyToID("_RongJieValue");
  9. public GameObjectPool pool;
  10. private MaterialPropertyBlock _materialPropertyBlock;
  11. private Renderer[] renderers;
  12. private float currTime;
  13. public void Init(GameObjectPool pool)
  14. {
  15. this.pool = pool;
  16. if (_materialPropertyBlock == null)
  17. {
  18. _materialPropertyBlock = new MaterialPropertyBlock();
  19. }
  20. Vector3 pos = CombatController.currActiveCombat.CombatCameraControllder.root.position;
  21. Vector3 p2 = pool.own.transform.position;
  22. float d = Vector3.Distance(pos, p2);
  23. currTime = Random.Range(-1f, 0);
  24. renderers = pool.own.transform.GetComponentsInChildren<Renderer>();
  25. SetPropertyBlock();
  26. }
  27. private void SetPropertyBlock()
  28. {
  29. _materialPropertyBlock.SetFloat(RongJieValue, currTime);
  30. for (int i = 0; i < renderers.Length; i++)
  31. {
  32. renderers[i].SetPropertyBlock(_materialPropertyBlock);
  33. }
  34. }
  35. public void Update(float t)
  36. {
  37. if (currTime < 1)
  38. {
  39. currTime += t * 2f;
  40. SetPropertyBlock();
  41. }
  42. }
  43. public override void ActiveObj()
  44. {
  45. }
  46. public override void DormancyObj()
  47. {
  48. currTime = 0;
  49. SetPropertyBlock();
  50. renderers = null;
  51. GObjectPool.Instance.Recycle(pool);
  52. pool = null;
  53. }
  54. }
  55. }