No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

GenerateSpriteShapes.cs 1.9KB

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