Unity Recipes - Head Bob or Breathe
Posted on Sep 3, 2018 (last modified Oct 10, 2021)
Here’s a handy Unity script that, when applied to a game object, will give the object a repetitive, but smooth upward and downward movement. This effect is often used to make a “head bob” or to make a player object look like it’s breathing; especially when it’s in idle state. This kind of effect can be achieved by animating the object before importing it (in a program like Blender, for example), but it can also be achieved with a sine wave function as provided by this script. The same or a similar script can also be used to make a main menu camera bob or to make lights breathe. Here it is:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Breathe : MonoBehaviour {
Vector3 startPos;
public float amplitude = 10f;
public float period = 5f;
protected void Start() {
startPos = transform.position;
}
protected void Update() {
float theta = Time.timeSinceLevelLoad / period;
float distance = amplitude * Mathf.Sin(theta);
transform.position = startPos + Vector3.up * distance;
}
}
After applying the script, you will need to adjust the float values for the amplitude and period to your liking.
References
- How to Lerp like a pro by Robert Utter