- Home /
How to draw dynamically on a UI Panel
I can draw directly on a quad but not a UI panel.
The following code works on a quad and just paints the quad all blue.
public class RenderTextureDrawer : MonoBehaviour {
public RenderTexture renderTexture;
public Renderer quadRenderer;
void Start() {
texture = new Texture2D(renderTexture.width, renderTexture.height);
quadRenderer.material.mainTexture = texture;
}
void Update() {
RenderTexture.active = renderTexture;
for (int i = 0; i < renderTexture.width; i++)
for (int j = 0; j < renderTexture.height; j++)
texture.SetPixel(i, j, new Color(0, 0, 1));
texture.Apply();
RenderTexture.active = null;
}
}
But when I try to do the same thing to a UI panel, changing the Renderer in the above code to a CanvasRenderer, the panel does not display anything.
public class RenderTextureDrawer : MonoBehaviour {
public RenderTexture renderTexture;
public CanvasRenderer panelRenderer;
void Start() {
texture = new Texture2D(renderTexture.width, renderTexture.height);
panelRenderer.setTexture(texture);
}
void Update() {
RenderTexture.active = renderTexture;
for (int i = 0; i < renderTexture.width; i++)
for (int j = 0; j < renderTexture.height; j++)
texture.SetPixel(i, j, new Color(0, 0, 1));
texture.Apply();
RenderTexture.active = null;
}
}
I have created the Panel with a RawImage instead of an image, and the RawImage's texture is a RenderTexture. The script's renderTexture is set to that RenderTexture and the script's panelRenderer is set to the Panel.
Answer by ro-anders · Dec 10, 2018 at 02:00 PM
Finally figured it out. In line 4 I was getting a reference to the RawImage's CanvasRenderer and in line 7 was trying to set its texture. I should not mess with the CanvasRenderer at all but, instead with the RawImage.
...
public RawImage image;
void Start() {
texture = new Texture2D(renderTexture.width, renderTexture.height);
image.texture = texture.
}
...