Measuring distance walked in first person view

For a psychological experiment for my thesis I want to measure the distance someone walks in centimetres in a 3D virtual environment I will create in Unity. Is this possible? If yes, how? And is it also possible to measure the time in (milli)seconds?

If someone will try to answer my question I will be very grateful!

Use Vector3.Distance. Units in Unity are generally considered to be metres.

Really basic stuff that I’m sure a search would’ve yielded. For the sake of answering and closing this question (and for science!), I shall give you some code to demonstrate…

public var totalDistance : float;
public var totalTime : float;

private var lastPos : Vector3;
private var currentPos : Vector3;

function Start()
{
	totalDistance = 0;
	totalTime = 0;
	lastPos = transform.position;
	currentPos = transform.position;
}

function Update()
{
	currentPos = transform.position;
	totalDistance += Vector3.Distance(currentPos, lastPos);
	totalTime += Time.deltaTime;
	lastPos = currentPos;
}

function OnGUI()
{
	GUI.Box( Rect( 20, 20, 200, 25 ), "Distance = " + totalDistance.ToString() );
	GUI.Box( Rect( 20, 50, 200, 25 ), "Time = " + totalTime.ToString() );
}

Very possible! It’s a common thing to need to store something and check changes to it; this is how I usually do it. Have a “last value” and update that at the end of the Update function; at the beginning of Update you use it to find the delta value. Initialize it in Start so it doesn’t jump to 1000 or something by default.

public class MovementMeasurer : MonoBehaviour {
  public float GetDistanceTraveled() { return distanceTraveled; }
  public float GetAverageSpeed() { return distanceTraveled / timePassed; }

  float distanceTraveled = 0f;
  float timePassed = 0f;
  
  Transform tx;
  Vector3 lastPosition;

  void Start() {
    tx = transform; // cache because why not and tx is shorter to type
    lastPosition = tx.position;
  }
  void Update() {
    distanceTraveled += (lastPosition - tx.position).magnitude;
    timePassed += Time.deltaTime;
    lastPosition = tx.position;
  }   
}