- Home /
RenderTexture not working correctly
I am working on some code to generate 2D colliders for 3D objects and I'm using RenderTextures to do it. If we look at this picture:
In the middle is the object rendered by the camera, on the left is the sprite generated from the renderTexture and on the right is the object with a collider generated from the sprite. Middle, Left, Right.
Where it gets tricky is this:
The generated sprite's got a giant bridge where a corner needs to be. Even if I call Apply on my texture2D (so it looks exactly like the cameras view), STILL the incorrect Physics Shape will be generated. How can I get my Physics Shape to look like the camera view rather than like the sprite on the left?
Code:
// Note: simplified to omit the unimportant bits.
var renderTexture = new RenderTexture(width, height, 0);
var texture2D = new Texture2D(width, height, TextureFormat.RGBA4444, false);
var rect = new Rect(0, 0, width, height);
var isSquare = width == height;
var points = new List<Vector2>();
// Setup the renderer and camera to align.
// Render the texture and read it to a Texture2D.
RenderTexture.active = renderCamera.targetTexture = renderTexture;
renderCamera.Render();
texture2D.ReadPixels(rect, 0, 0, false);
//texture2D.Apply(); not making a difference for the physics shape.
// Create a sprite out of the texture2D and let it generate a physics shape.
var pixelsPerUnit = isSquare
? texture2D.width * 0.5f / renderCamera.orthographicSize
: Mathf.Max(texture2D.width, texture2D.height) * 0.5f / renderCamera.orthographicSize;
var sprite = Sprite.Create(texture2D, rect, new Vector2(0.5f, 0.5f), pixelsPerUnit, 0, SpriteMeshType.FullRect, Vector4.zero, true);
//Give the generated physics shape to the polygonCollider2D.
var pathCount = polygonCollider2D.pathCount = sprite.GetPhysicsShapeCount();
for(int i = 0; i < pathCount; i++)
{
sprite.GetPhysicsShape(i, points);
// Optimize points. It's not this, this was disabled for both pictures.
polygonCollider2D.SetPath(i, points);
}
Your answer
![](https://koobas.hobune.stream/wayback/20220613011506im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Polygon Collider 2D Not Precise Enough 0 Answers
Loading a Sprite (Unity 4.3) in resource folder and setting it in sprite renderer 6 Answers
Combine Array of Sprites to Form One Sprite 0 Answers
Reference Specific Sprites from Atlas 1 Answer
iOS crash with "Memory pressure" error - too many sprites? 0 Answers