Tip of the day entries for 2014

From Unify Community Wiki
Jump to: navigation, search

December 2014

  • Tip #78 – Lock the mouse cursor to the screen

There are some instances when you may need to lock the mouse cursor to the screen. For example rotating the camera where you would press down on the right mouse button then drag the mouse to rotate the camera. If you wish to hide the mouse cursor and lock it to the screen while dragging you can use Screen.lockCursor.

using UnityEngine;
public class lockCursorExample : MonoBehaviour
    void DidLockCursor()
        Debug.Log("Locking cursor");
    void DidUnlockCursor()
        Debug.Log("Unlocking cursor");
    private bool wasLocked;
    void Update()
        if (!Screen.lockCursor && this.wasLocked)
            this.wasLocked = false;
        else if (Screen.lockCursor && !this.wasLocked)
            this.wasLocked = true;
        if (Input.GetMouseButtonDown(1))
            Screen.lockCursor = true;
        if (Input.GetMouseButtonUp(1))
            Screen.lockCursor = false;
  • Tip #77 – ToolTip Attribute for MonoBehaviour fields

Ever wish you could have a tool tip appear when hovering your mouse over a control in the inspector? Well look no further then Unity’s ToolTip attribute that you can apply to your MonoBehaviour’s fields!

using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
    [Tooltip("Health value between 0 and 100.")]
    public int health = 0;

November 2014

  • Tip #76 – Don’t Destroy On Scene Load

Sometimes it is handy to keep a game object alive for as long as your game is running. In order to prevent your object from being destroyed when loading a new scene use GameObject.DontDestroyOnLoad and your game object will persist between scene changes.

  • Tip #75 – Get default Arial font at runtime using code

If you need to retrieve the default Arial font via code at run time you can do so using the Resources.GetBuiltInResource method.

var font = Resources.GetBuiltinResource(typeof(Font), "Arial.ttf") as Font;
  • Tip #74 – Change text field properties with GUISettings

If you need to stylize your gui you can use the GUISettings class to change, the cursor color, flash speed, the selection color for text fields, as well as double click behavior.

public class GuiSettingsExample : MonoBehaviour
    public Color cursorColor;    
    public float flashSpeed;     
    public bool doubleClickSelectWord;      
    public Color selectionColor;            
    public bool tripleCLickLine;            
    private string text = "test string";    
    private Vector2 scroll;                 
    public GUISkin skin;                    
    public void OnGUI()
        GUI.skin = this.skin;
        var settings = GUI.skin.settings;
        settings.cursorColor = this.cursorColor;
        settings.cursorFlashSpeed = this.flashSpeed;
        settings.doubleClickSelectsWord = this.doubleClickSelectWord;
        settings.selectionColor = this.selectionColor;
        settings.tripleClickSelectsLine = this.tripleCLickLine;
        this.scroll = GUILayout.BeginScrollView(this.scroll, false, false, GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true));
        this.text = GUILayout.TextArea(this.text);

May 2014

  • Tip #73 – GUI Matrix

Did you know that the GUI class has a matrix property that you can use to rotate and scale your gui elements.

The sample behaviour that is provided below will scale and rotate a gui label in the center of the screen.

public class GuiMatrixDemo : MonoBehaviour
    private float rotation;
    /// <summary>
    /// OnGUI is called for rendering and handling GUI events.
    /// </summary>
    public void OnGUI()
        var matrix = GUI.matrix;
        GUI.Label(new Rect(5, 5, 100, 20), "before matrix");
        this.rotation += 15f * Time.deltaTime;
        var scale = Mathf.Clamp((float)Math.Sin(Time.time) + 1 * 2, 1, 3);
        GUI.matrix = Matrix4x4.TRS(new Vector3(Screen.width / 2, Screen.height / 2, 0), Quaternion.Euler(0, 0, this.rotation), Vector3.one * scale);
        var size = GUI.skin.label.CalcSize(new GUIContent("test string"));
        var rect = new Rect((-size.x / 2f), (-size.y / 2f), size.x, size.y);
        GUI.Label(rect, "test string");
        GUI.matrix = matrix;
        GUI.Label(new Rect(5, 25, 100, 20), "after matrix");
Personal tools