FreezeBehaviour.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using System.Collections.Generic;
  2. using UnityEngine;
  3. using System.Collections;
  4. public class FreezeBehaviour : MonoBehaviour
  5. {
  6. public Material iceMaterial;
  7. public bool isFrozen;
  8. public float FreezeTime = 5;
  9. private Material oldMaterial;
  10. // private bool isCanSetMaterial = true;
  11. private float cutoff;
  12. private FrozenState frozenState = FrozenState.Default;
  13. // Use this for initialization
  14. private void Start()
  15. {
  16. if(iceMaterial == null) Debug.Log("FreezeBehaviour can't fing Ice material");
  17. oldMaterial = GetComponent<Renderer>().materials[0];
  18. if (iceMaterial!=null)
  19. iceMaterial.SetFloat("_Cutoff", 0);
  20. }
  21. // Update is called once per frame
  22. private void Update()
  23. {
  24. if (isFrozen) frozenState = FrozenState.LoadMaterial;
  25. else if(frozenState!=FrozenState.Default) frozenState = FrozenState.UpdateMaterialUnFreeze;
  26. if (frozenState==FrozenState.LoadMaterial) LoadMaterial();
  27. if (frozenState==FrozenState.UpdateMaterialFreeze) UpdateMaterialFreeze();
  28. if (frozenState == FrozenState.UpdateMaterialUnFreeze) UpdateMaterialUnFreeze();
  29. }
  30. private void LoadMaterial()
  31. {
  32. // isCanSetMaterial = false;
  33. var materials = new Material[2];
  34. materials[0] = oldMaterial;
  35. materials[1] = iceMaterial;
  36. GetComponent<Renderer>().materials = materials;
  37. frozenState = FrozenState.UpdateMaterialFreeze;
  38. }
  39. private void UpdateMaterialFreeze()
  40. {
  41. var time = Time.deltaTime / FreezeTime;
  42. if (cutoff + time <= 1) {
  43. cutoff += time;
  44. iceMaterial.SetFloat("_Cutoff", cutoff);
  45. }
  46. else frozenState = FrozenState.Frozen;
  47. }
  48. private void UpdateMaterialUnFreeze()
  49. {
  50. var time = Time.deltaTime / FreezeTime;
  51. if (cutoff-time > 0) {
  52. cutoff -= time;
  53. iceMaterial.SetFloat("_Cutoff", cutoff);
  54. }
  55. else frozenState = FrozenState.Default;
  56. }
  57. enum FrozenState
  58. {
  59. Default,
  60. LoadMaterial,
  61. UpdateMaterialFreeze,
  62. UpdateMaterialUnFreeze,
  63. Frozen
  64. }
  65. }