- Home /
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: https://www.assetstore.unity3d.com/#/content/7677
yea this is an efficiency thing. You want to know not if someone is close to the camera but if the camera can see it. However tossing out a raycast every millisecond just to check is really annoyingly intensive. It's a constant physics engine time sink. A $$anonymous$$or one but still.
So you toss a trigger on there. Now it wont even check until your acutally close enough to bother checking. It means that if you have 30 of them in a scene thats ok because the ones far away from you won't keep going on checking for you. They'll do a quick are you touching the trigger collider check and go nope ok don't even bother.
Answer by Chronos-L · Mar 21, 2013 at 10:23 AM
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.
Your answer
Follow this Question
Related Questions
Collision detection accuracy issues. 1 Answer
Trigger Spawning? 1 Answer
Can't click gameobject when over another trigger? 1 Answer
Colliding two GameObjects 1 Answer