- Home /
Filling image without compromises
I'm building a progressive image that fills himself with time. Basically the image is, very simply, 2 half images, one above the other. It would be very simple to do that with a GUITexture on bottom, and a clipped texture drawn with GUI.DrawTextureWithTexCoords, but I need to draw things above it.
I know that I can invoke directly Camera.Render from OnGUI, but I have a very complex hierarchy of cameras, and they aren't always active, sometimes they are even instantiated, so it is a very complex thing to do.
There are three solutions, as far as I know, to achieve the goal and don't twist my existing code and scene completely.
Build a RenderTexture
Convert all the GUI layer I have in a polygonal gui with a dedicated camera
Alter the texture with Texture2D.SetPixels
All the solutions seems to be too slow or complex to achieve for this simple clipping operation.
Is there a way to solve the problem simply and fast?
EDIT: That's a simple script that works (except for the texture that is drawn in front of all the other things). I hope it helps to understand the goal I'm trying to achieve.
using UnityEngine;
public class ButtonOverlay: MonoBehaviour
{
public Texture2D texture;
public float fill = 0.5f;
protected GUITexture parentGUI;
protected void Awake()
{
parentGUI = GetComponentInParent<GUITexture>();
}
protected void OnGUI()
{
var rect = parentGUI.GetScreenRect();
rect.y = Screen.height - rect.y - rect.height;
var f = Mathf.Clamp(fill, 0, 1);
var delta = rect.height * (1 - f);
var clippedRect = rect;
clippedRect.y += delta;
clippedRect.height -= delta;
var textureRect = new Rect(0, 0, 1, f);
GUI.DrawTextureWithTexCoords(clippedRect, texture, textureRect);
}
}
Your answer
Follow this Question
Related Questions
How completly remove GUI.Repaint() calls ? 1 Answer
why is my GUI script bugging other GUI scripts? 0 Answers
OnGUI button created by a foreach loop 4 Answers
Unity 4.7 - OnGUI prevent click/touch through 0 Answers
GUI Performance & Texture Atlasing 0 Answers