Why does this script check for raycast collision? Is it necessary?

I recently downloaded the Unity Project #1 from the new Unity Learn and was reading through the scripts. This code snippet comes from the DoneCCTVPlayerDetection.cs script. It is attached to a camera whose goal is to trigger an alarm upon seeing the player.

void OnTriggerStay (Collider other)
	{
		// If the colliding gameobject is the player...
		if(other.gameObject == player)
		{
			// ... raycast from the camera towards the player.
			Vector3 relPlayerPos = player.transform.position - transform.position;
			RaycastHit hit;
			
			if(Physics.Raycast(transform.position, relPlayerPos, out hit))
				// If the raycast hits the player...
				if(hit.collider.gameObject == player)
					// ... set the last global sighting of the player to the player's position.
					lastPlayerSighting.position = player.transform.position;
		}
	}

Why does the camera check for raycast collision? Shouldn’t it be enough to use OnTriggerStay to detect the player and trigger the alarm? Sorry for the newbie question!

For more info, here is the project that I am talking about: Unity Asset Store - The Best Assets for Game Making

1 Answer

1

This is a CCTV camera script.

So if Physics.Raycast(transform.position, relPlayerPos, out hit) return false, that means there is something between the camera and the player (a crate for example), in this case, the player is visually invisible to the camera (can’t see anything, so nothing’s wrong)

If the raycast returns true instead, it means that the camera can see the player fine, so it will update the lastPlayerSighting to the current location of the player.

Thank you very much! Straight and simple answer :)

I am glad that I could help.