F3DWarpJumpTunnel.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using UnityEngine;
  2. using System.Collections;
  3. public class F3DWarpJumpTunnel : MonoBehaviour
  4. {
  5. private new Transform transform;
  6. private MeshRenderer meshRenderer;
  7. public float StartDelay, FadeDelay;
  8. public Vector3 ScaleTo;
  9. public float ScaleTime;
  10. public float ColorTime, ColorFadeTime;
  11. public float RotationSpeed;
  12. private bool grow = false;
  13. float alpha;
  14. int alphaID;
  15. void Awake()
  16. {
  17. transform = GetComponent<Transform>();
  18. meshRenderer = GetComponent<MeshRenderer>();
  19. alphaID = Shader.PropertyToID("_Alpha");
  20. }
  21. public void OnSpawned()
  22. {
  23. grow = false;
  24. meshRenderer.material.SetFloat(alphaID, 0);
  25. F3DTime.time.AddTimer(StartDelay, 1, ToggleGrow);
  26. F3DTime.time.AddTimer(FadeDelay, 1, ToggleGrow);
  27. transform.localScale = new Vector3(1f, 1f, 1f);
  28. transform.localRotation = transform.localRotation * Quaternion.Euler(0, 0, Random.Range(-360, 360));
  29. }
  30. void ToggleGrow()
  31. {
  32. grow = !grow;
  33. }
  34. // Update is called once per frame
  35. void Update()
  36. {
  37. transform.Rotate(0f, 0f, RotationSpeed * Time.deltaTime);
  38. if (grow)
  39. {
  40. transform.localScale = Vector3.Lerp(transform.localScale, ScaleTo, Time.deltaTime * ScaleTime);
  41. alpha = Mathf.Lerp(alpha, 1, Time.deltaTime * ColorTime);
  42. meshRenderer.material.SetFloat(alphaID, alpha);
  43. }
  44. else
  45. {
  46. alpha = Mathf.Lerp(alpha, 0, Time.deltaTime * ColorFadeTime);
  47. meshRenderer.material.SetFloat(alphaID, alpha);
  48. }
  49. }
  50. }