GenerateSpriteShapes.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.Rendering;
  5. using UnityEngine.U2D;
  6. // Please add this Component to Camera or some top level object on each loadable scene.
  7. public class GenerateSpriteShapes : MonoBehaviour
  8. {
  9. // Once all SpriteShapes are rendered, remove this Component if On or remove it from elsewhere.
  10. public bool destroyOnCompletion = true;
  11. void OnGUI()
  12. {
  13. // Loop all invisible SpriteShapeRenderers and generate geometry.
  14. SpriteShapeRenderer[] spriteShapeRenderers = (SpriteShapeRenderer[]) GameObject.FindObjectsOfType (typeof(SpriteShapeRenderer));
  15. CommandBuffer rc = new CommandBuffer();
  16. rc.GetTemporaryRT(0, 256, 256, 0);
  17. rc.SetRenderTarget(0);
  18. foreach (var spriteShapeRenderer in spriteShapeRenderers)
  19. {
  20. var spriteShapeController = spriteShapeRenderer.gameObject.GetComponent<SpriteShapeController>();
  21. if (spriteShapeRenderer != null && spriteShapeController != null)
  22. {
  23. if (!spriteShapeRenderer.isVisible)
  24. {
  25. spriteShapeController.BakeMesh();
  26. rc.DrawRenderer(spriteShapeRenderer, spriteShapeRenderer.sharedMaterial);
  27. // Debug.Log("generating shape for " + spriteShapeRenderer.gameObject.name);
  28. }
  29. }
  30. }
  31. rc.ReleaseTemporaryRT(0);
  32. Graphics.ExecuteCommandBuffer(rc);
  33. // SpriteShape Renderers are generated. This component is no longer needed. Delete this [or] remove this Component from elsewhere.
  34. if (destroyOnCompletion)
  35. Destroy(this);
  36. }
  37. }