Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 11 Next capture
2021 2022 2023
1 capture
11 Jun 22 - 11 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 simon56 · Jul 19, 2015 at 04:20 PM · transformrotatechecklooking

How to know if an object is looking at an other

Hi, I'm trying to know if an object is looking at an other object. I don't want to rotate the first in order for it to see the second, just checking if it's looking, so I don't need Transform.LookAt. Also, is it possible to return true if the object is not perfectly looking at the second ? (The 2nd object can be in a radius of say 5 degrees)

Comment
Add comment
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

3 Replies

· Add your reply
  • Sort: 
avatar image
9

Answer by tanoshimi · Jul 19, 2015 at 04:24 PM

Take the dot product of the facing direction of ObjA compared to the direction from ObjA to ObjB.

  • If it's 1, ObjA is looking exactly at ObjB.

  • If it's -1, ObjA is looking completely the opposite direction to ObjB

  • If it's somewhere between 0 and 1, they're looking roughty in the right direction - you choose the threshold for what you want to define as "not perfectly".

Untested code follows:

  Vector3 dirFromAtoB = (ObjB.transform.position - ObjA.transform.position).normalized;
  float dotProd = Vector3.Dot(dirFromAtoB, ObjA.transform.forward);
 
  if(dotProd > 0.9) {
    // ObjA is looking mostly towards ObjB
  }



Comment
Add comment · Show 1 · 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 sayginkarahan · May 23, 2019 at 07:19 PM 0
Share

Thank you! It is very simple and works like a champion :)

avatar image
0

Answer by etopsirhc · Jul 19, 2015 at 04:26 PM

if there is a distance set limit to the view distance you could create a trigger area shaped like a cone and attached to the object that you need the info from. and then raycast to see if it's hidden behind walls.

Comment
Add comment · 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
0

Answer by Raven-Rock · Jul 19, 2015 at 04:35 PM

There's a couple of ways you can do this. IF you care about line of sight (not obstructed by something) You will want to do a raycast from object a to b and then get the viewing angle to see if it's appropriate. Another approach would just to be just using multiple raycasts in the direction you want to check.

You could use something like the following. Apologize in advance if there's a typo.

 GameObject target;
 Float distance=10f;
 Vector3 hostPos=gameObject.Transform.position;
 Vector3 targetPos=target.Transform.position;
 Ray ray=new Ray(hostPos,(targetPos-hostPos).normalized*10);
 RaycastHit hit;
 if(Physics.Raycast(ray,out hit,distance))
 {
     if(hit.collider.gameObject==target)
     {
         float angle = Vector3.Angle((targetPos - hostPos), gameObect.Transform.forward);
         if(angle<5f)
         {
             //Do something
         }
     }
 }



Comment
Add comment · 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

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

5 People are following this question.

avatar image avatar image avatar image avatar image avatar image

Related Questions

RotateAround doesnt work 1 Answer

Transform.LookAt - Look through Y-Axis? 1 Answer

How to prevent Z axis rotation ? 0 Answers

Rotating a bone via scripts 1 Answer

transform.rotate moving object away somehow, 0 Answers


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