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 IAmJeff · Nov 20, 2013 at 06:34 AM · debug.drawline

enemy's line of sight

I know this is probally simple but how can I add in a max distance of the enemy's line of sight. So that if I'm within a certain angle and a certain distance the enemy can see me. And two, I have two debug.drawray that draws an angle to represent its angle sight view. So how can I connect both end-points of each line so it become a cone?

 Vector3 rayDirection = player.transform.position - transform.position;
         
         // Detect if player is within the field of view
         if((Vector3.Angle(rayDirection, transform.forward)) < fieldOfViewRange)
         { 
             if (Physics.Raycast (transform.position, rayDirection, out hit)) 
             {
                 if (hit.transform.tag == "Player") 
                 {
                     //GetComponent<NavMeshAgent>().destination = player.position;
                     renderer.material.color = Color.yellow;
                     //Debug.Log("Can see player");
                     isAlterted = true;
                 }
             }
Comment
Add comment · Show 2
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 robertbu · Nov 20, 2013 at 07:22 AM 0
Share

I unsure of your logic here, but for the specific question you ask use the form of Raycast() that takes a distance parameter:

 static bool Raycast(Ray ray, RaycastHit hitInfo, float distance = $$anonymous$$athf.Infinity, int layer$$anonymous$$ask = DefaultRaycastLayers);

Or check the distance to the object hit:

 if (Vector3.Distance(transform.position, hit.transform.position) < someValue)
avatar image gajdot · Nov 20, 2013 at 07:50 AM 0
Share

You could achieve with two easy steps: First cast a sphere to check what's in the desired distance. For this you can use OverlapSphere. This will return every collider which is inside a given radius (aka. max distance on visibility)

http://docs.unity3d.com/Documentation/ScriptReference/Physics.OverlapSphere.html

Just saw you already had the angle part, so use the above code to check what's inside your radius and only check the angles for those objects.

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by Sparrowfc · Nov 20, 2013 at 07:59 AM

It's quite unnecessary to use Raycast in your case, since you have the reference of the sepcific target.

if(Vector3.Angle(rayDirection, transform.forward) < fieldOfViewRange && Vector3.Distance(transform.positon, player.position) < alertRange)

will just be fine. Anyway, if you insist on using raycast you can write like this

if (Physics.Raycast (transform.position, rayDirection, out hit, alertRange))

Check 'Handles.DrawSolidArc' in Unity Documents and follow it's example code if you want to debug advanced visual info.

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

19 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 avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

How do I Debug.DrawLine through an array of Vector3? 1 Answer

Debug.DrawLine doesn't work 1 Answer

ScreenPointtoRay Problem, how does it work!?! 1 Answer

2 raycasts on the fpwalker/camera 1 Answer

raycasting issue 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