Get Component

The most direct way to get a reference to another component is to use the GetComponent method.

using UnityEngine;

public sealed class GetComponentExample : MonoBehaviour
{
    private void FixedUpdate()
    {
        var rigidbody = GetComponent<Rigidbody>();
        rigidbody.AddForce(Vector3.up * 10);
    }
}

The above example will search for a Rigidbody component attached to the same GameObject as this GetComponentExample component. Then it applies some upwards force to that Rigidbody.

Advantages

  • Simple - When you need something, you just get it where other approaches require a bit more setup.
  • Short - You could even write it on a single line as GetComponent<Rigidbody>().AddForce(Vector3.up * 10);.

Disadvantages

Summary Description Solution
Slow Searching for another component has a notable performance cost which applies every frame with this approach. Get Component Cached is the direct solution, but all other approaches solve this problem.
Unsafe Adding the GetComponentExample component to an object in the Unity Editor gives no indication that it also needs a Rigidbody component attached to the same object. You will only find out when you try to run the game and it spams the Console window with a MissingComponentException every frame. Require Component helps, but Serialized Field is better.
Becomes very verbose when repeated If you need to access the Rigidbody in multiple places, repeating the GetComponent call for each one will take up a lot of space. All other approaches take a bit more code to set up a field, but then the field can be easily used throughout the whole script.
Inflexible The GetComponentExample needs to be on the same GameObject as the Rigidbody unless you edit the script. Serialized Field.