Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by Smike · Mar 21, 2013 at 10:17 AM · collisioncollidertriggervector3raycasting

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

Comment
Add comment · Show 1
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image sparkzbarca · Mar 21, 2013 at 10:32 AM 0
Share

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.

1 Reply

· Add your reply
  • Sort: 
avatar image
0
Best Answer

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.

Comment
Add comment · Show 2 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Smike · Mar 22, 2013 at 05:36 AM 0
Share

Thank you very much! Straight and simple answer :)

avatar image Chronos-L · Mar 22, 2013 at 05:51 AM 0
Share

I am glad that I could help.

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

12 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

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

Compound collider does not trigger the parent 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges