• 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 Laurgrin · Jul 05, 2016 at 06:01 AM · layersraycasthit2dlayermask

Raycasting on specific layers problem

I'm trying to make a raycaster to only cast in a certain layer, but for some reason it's not exactly working.

 IEnumerator MoveToDestination () { 
         foreach (Vector3 nextStep in pathTaken) { 
 
             if (Raycaster.RaycastWithLayerMask (nextStep, Vector2.zero, Mathf.Infinity, 10).collider != null) {
                 Raycaster.RaycastWithLayerMask (nextStep, Vector2.zero, Mathf.Infinity, 10).collider.GetComponent<SpriteRenderer> ().color = new Color (0.0f, 0.0f, 0.0f, 0.0f);
             } else {
                 print ("Raycasting returned null. Tell the dev to fix his shit.");
             }
 
             while (nextStep != transform.position) {
                 transform.position = Vector3.MoveTowards (transform.position, nextStep, speed * Time.deltaTime); 
                 yield return new WaitForEndOfFrame ();
             }
         }
         blockInput = false; //Player is allowed to input new move commands again.
         GetComponent<UnitController>().IsSelected = false;
         PathfinderBase.DestroyAgents();
         yield return new WaitForEndOfFrame();
     }

That is the entire coroutine for context. The problematic part is this:

 if (Raycaster.RaycastWithLayerMask (nextStep, Vector2.zero, Mathf.Infinity, 10).collider != null) {
                 Raycaster.RaycastWithLayerMask (nextStep, Vector2.zero, Mathf.Infinity, 10).collider.GetComponent<SpriteRenderer> ().color = new Color (0.0f, 0.0f, 0.0f, 0.0f);
             } else {
                 print ("Raycasting returned null. Tell the dev to fix his shit.");
             }

I know and specifically checked which layer I want to raycast on, which is 10. For some reason, null is always returned.

As for what I'm trying to do, once a player clicks on a position eligible for moving, an array of Vector3 is returned from that specific pathfinder object, giving a path to it from the player unit. Obviously, each element of that array is a step towards that selected position. Also, upon setting the path, the pathfinder agents become visible, to signify the chosen path to the player. I want them to become invisible again section by section, as the unit starts moving towards each section.

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

0 Replies

· Add your reply
  • Sort: 

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.

Welcome to Unity Answers

The best place to ask and answer questions about development with Unity.

To help users navigate the site we have posted a site navigation guide.

If you are a new user to Unity Answers, check out our FAQ for more information.

Make sure to check out our Knowledge Base for commonly asked Unity questions.

If you are a moderator, see our Moderator Guidelines page.

We are making improvements to UA, see the list of changes.



Follow this Question

Answers Answers and Comments

3 People are following this question.

avatar image avatar image avatar image

Related Questions

Physics2D.CircleCast produces no result whenever a layer mask is specified 1 Answer

How to take only objects with a certain layer ? c# 0 Answers

ArgumentException: NameToLayer can only be called from the main thread 1 Answer

Physics Collision Layer Programmatically. 0 Answers

LayerMask is incorrect 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