Guide to MonoBehaviour in Unity

MonoBehaviour is a base class for all Unity scripts that provides a wide range of built-in functionality for controlling game objects, responding to player input, controlling the rendering, and many more.

Basics of MonoBehaviour

To create a new script that inherits from MonoBehaviour use the "Create" menu in the Unity editor. Simply right-click in the Project window, select "Create," and then choose "C# Script." Name the script and double-click on it to open it in the predefined code editor.

The basic structure of a script derived from MonoBehaviour looks like this:

using UnityEngine;

public class MyScript : MonoBehaviour
    // Variables and methods go here

MyScript is the name of the script, and it inherits from the MonoBehaviour class. It's possible to add your own variables and methods to the script, and Unity will automatically call them based on the code.

Methods in MonoBehaviour

MonoBehaviour provides a number of methods that can be overridden to control the behavior of the game objects. Below are some of the most commonly used methods:

  • Awake(): Called when the script instance is initialized, before any other methods are called. It is used to initialize variables, set up references to other objects or components, and perform any necessary setup tasks for the script or game object.
  • Start(): Called once when the script is first enabled. This method is often used to initialize variables and set up the game object.
  • Update(): Called every frame, often tied to a screen's refresh rate. This method is commonly used to update the game object's position, rotation, and other properties based on player input.
  • FixedUpdate(): Called every fixed frame, at a fixed interval (e.g. 50 times per second). This method is often used for physics-related updates, such as moving a rigidbody.
  • LateUpdate(): Called every frame after all other updates have been processed. This method is often used to update the game object's position and rotation based on the position of other game objects, such as a camera that follows the player.
  • OnCollisionEnter(Collision collision): Called when the game object collides with another object. This method is often used to handle collision-related events, such as destroying a bullet when it hits an enemy.

Variables in MonoBehaviour

MonoBehaviour also provides access to a number of built-in variables that can be used to control the behavior of the game object. Below are some of the most commonly used variables:

  • transform: Provides access to the game object's transform component, which controls its position, rotation, and scale.
  • gameObject: Provides access to the game object itself, which can be used to enable or disable the game object, among other things.
  • GetComponent<T>(): Returns a component of type T attached to the game object, or null if no such component exists.
  • Time.deltaTime: The amount of time that has passed since the last frame. This can be used to create smooth and consistent animations and updates.
  • Input: A static class that provides access to the player's input devices, such as the keyboard, mouse, and gamepad.

Best Practices for Using MonoBehaviour

Here are some best practices to keep in mind when using MonoBehaviour in Unity projects:

  • Keep the scripts organized and easy to read by breaking them up into small, focused methods.
  • Use comments and documentation to explain what each method and variable does.
  • Use the built-in Unity editor to test and tweak the scripts, and iterate on them until they work as expected.
  • Use profiling and debugging tools to identify and fix performance issues in the scripts.
  • Use third-party tools and libraries, such as plugins, to save time and improve the quality of the scripts.

Following these best practices will ensure a more efficient and effective code to power Unity games and experiences.


MonoBehaviour is a powerful and versatile base class in Unity that provides a wide range of functionality for controlling game objects and responding to player input. By using the methods and variables provided by it, it's possible to create complex and engaging gameplay mechanics that will keep the players coming back for more. Remember to keep the code organized, well-documented, and optimized for performance, and you'll be well on your way to creating amazing Unity games and experiences.