Browse Source

Added AnchorGUITexture component and prefab.

AnchorGUITexture draws a texture on the screen at a consistent size and
position regardless of the screen resolution & aspect ratio.
master
chrisgregan 11 years ago
parent
commit
569c644723
  1. BIN
      Assets/Fungus/Prefabs/AnchorGUITexture.prefab
  2. 4
      Assets/Fungus/Prefabs/AnchorGUITexture.prefab.meta
  3. 71
      Assets/Fungus/Scripts/AnchorGUITexture.cs
  4. 8
      Assets/Fungus/Scripts/AnchorGUITexture.cs.meta

BIN
Assets/Fungus/Prefabs/AnchorGUITexture.prefab

Binary file not shown.

4
Assets/Fungus/Prefabs/AnchorGUITexture.prefab.meta

@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: a55e55be9295f4b9db04d66b1f66612c
NativeFormatImporter:
userData:

71
Assets/Fungus/Scripts/AnchorGUITexture.cs

@ -0,0 +1,71 @@
using UnityEngine;
using System.Collections;
/**
* Draws a GUI texture at a consistent size regardless of screen resolution.
* The texture can be positioned anywhere on the screen using normalized screen coords.
* Vertical and horizontal padding can be applied to offset the texture away from the screen edge.
*/
public class AnchorGUITexture : MonoBehaviour
{
/// Texture to draw on the screen.
public Texture2D texture;
/// Fraction of screen height (for resolution independent sizing).
public float verticalScale = 0.2f;
/// Texture position on screen in localized screen coords ([0..1], [0..1])
public Vector2 screenPosition;
/// Vertical and horizontal space between edge of screen and texture (in pixels).
public Vector2 padding;
void OnGUI()
{
if (texture == null)
{
return;
}
// Calc initial center point
float x = screenPosition.x * Screen.width;
float y = screenPosition.y * Screen.height;
// Height is calculated as a fraction of screen height for resolution independent sizing.
// Width is then calculated so as to maintain the original aspect ratio of the texture.
float height = Screen.height * verticalScale;
float width = texture.width * (height / texture.height);
// Calc initial rect for rendering texture
float x1 = x - width / 2f;
float y1 = y - height / 2f;
float x2 = x + width / 2f;
float y2 = y + height / 2f;
// Adjust rect to fit on screen, and apply vertical & horizontal padding
if (x1 < padding.x)
{
x1 = padding.x;
x2 = x1 + width;
}
if (x2 > Screen.width - padding.x)
{
x2 = Screen.width - padding.x;
x1 = x2 - width;
}
if (y1 < padding.y)
{
y1 = padding.y;
y2 = y1 + height;
}
if (y2 > Screen.height - padding.y)
{
y2 = Screen.height - padding.y;
y1 = y2 - height;
}
// Draw the texture
Rect textureRect = new Rect(x1, y1, x2 - x1, y2 - y1);
GUI.DrawTexture(textureRect, texture);
}
}

8
Assets/Fungus/Scripts/AnchorGUITexture.cs.meta

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 8ea93591566a948c1bb46ec405d87bb5
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
Loading…
Cancel
Save