• Runtimes
  • Spine skeleton to unity sprite at runtime

Hi,
I want to get current sprite from skeleton and do some stuff with it, is there any easy way to do that or some examples?

Right now I have to use second camera - > render texture - > code to convert it to sprite

    Related Discussions
    ...

    To get the current sprite from a Spine skeleton in Unity at runtime, you can render the skeleton to a texture using a RenderTexture and then convert that texture to a sprite. This approach is necessary because Spine uses mesh-based rendering, and there isn't a direct way to extract a "current frame" image from the skeleton.

    Here is a basic outline of how you can achieve this:

    1. Set up a second camera: This camera will render the Spine skeleton to a RenderTexture.

    2. Create a RenderTexture: Assign this texture to the second camera.

    3. Render the skeleton: Use the second camera to render the skeleton to the RenderTexture.

    4. Convert the RenderTexture to a Texture2D: This step involves reading the pixels from the RenderTexture and creating a new Texture2D.

    5. Create a sprite from the Texture2D: Finally, you can create a Unity sprite from the Texture2D.

    Here is a sample code snippet to illustrate these steps:

    using UnityEngine;
    
    public class SpineToSprite : MonoBehaviour
    {
        public Camera renderCamera;
        public RenderTexture renderTexture;
        public Spine.Unity.SkeletonAnimation skeletonAnimation;
    
        void Start()
        {
            // Set up the render texture
            renderTexture = new RenderTexture(512, 512, 24);
            renderCamera.targetTexture = renderTexture;
        }
    
        void Update()
        {
            // Render the skeleton to the render texture
            renderCamera.Render();
    
            // Convert the render texture to a Texture2D
            Texture2D texture = new Texture2D(renderTexture.width, renderTexture.height, TextureFormat.RGBA32, false);
            RenderTexture.active = renderTexture;
            texture.ReadPixels(new Rect(0, 0, renderTexture.width, renderTexture.height), 0, 0);
            texture.Apply();
            RenderTexture.active = null;
    
            // Create a sprite from the Texture2D
            Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
    
            // Do something with the sprite
            // For example, assign it to a UI Image component
            // GetComponent<UnityEngine.UI.Image>().sprite = sprite;
        }
    }

    This code sets up a second camera to render the Spine skeleton to a RenderTexture, converts the RenderTexture to a Texture2D, and then creates a sprite from the Texture2D. You can then use this sprite as needed in your application.

    For more details on using RenderTexture in Unity, you can refer to the Unity Manual.

    RED I want to get current sprite from skeleton and do some stuff with it, is there any easy way to do that or some examples?

    Note that the spine-unity runtime already comes with a SkeletonRenderTexture example component. Also check out the provided example scene Spine Examples/Other Examples/RenderTexture FadeOut Transparency.