diff --git a/Assets/Fungus/Prefabs/AnchorGUITexture.prefab b/Assets/Fungus/Prefabs/AnchorGUITexture.prefab new file mode 100644 index 00000000..0c9fd8f7 Binary files /dev/null and b/Assets/Fungus/Prefabs/AnchorGUITexture.prefab differ diff --git a/Assets/Fungus/Prefabs/AnchorGUITexture.prefab.meta b/Assets/Fungus/Prefabs/AnchorGUITexture.prefab.meta new file mode 100644 index 00000000..4dedd3d2 --- /dev/null +++ b/Assets/Fungus/Prefabs/AnchorGUITexture.prefab.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: a55e55be9295f4b9db04d66b1f66612c +NativeFormatImporter: + userData: diff --git a/Assets/Fungus/Scripts/AnchorGUITexture.cs b/Assets/Fungus/Scripts/AnchorGUITexture.cs new file mode 100644 index 00000000..5d99922b --- /dev/null +++ b/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); + } +} diff --git a/Assets/Fungus/Scripts/AnchorGUITexture.cs.meta b/Assets/Fungus/Scripts/AnchorGUITexture.cs.meta new file mode 100644 index 00000000..a44847b1 --- /dev/null +++ b/Assets/Fungus/Scripts/AnchorGUITexture.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8ea93591566a948c1bb46ec405d87bb5 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: