Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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 /
  • Help Room /
avatar image
0
Question by OctoMan · Nov 05, 2015 at 02:52 PM · raycastsetactivehitfindchild

Highlighting with a Raycast

When i drag around a tile i want to highlight a field once the ray shot by the card hits a field or another card. That works so far.

Now when the Raycast is not hitting this field or card anymore, i want to disable it.

 if(Physics.Raycast(ray, out hit, 15))
         {
             if(hit.collider.tag == "SnapField")
             {
                 hitPlayfield = true;
                 hitCard = false;
                 //highlight the field
                 HighLightField = hit.collider.transform.FindChild("HighLightField").gameObject;
                 HighLightField.SetActive(true);

                 newPosition = hit.collider.gameObject.transform.position;
             }

             else if(hit.collider.tag == "card")
             {
                 hitPlayfield = false;
                 hitCard = true;
                 //Highlight the field
                 HighLightField = hit.collider.transform.FindChild("HighLightField").gameObject;
                 HighLightField.SetActive(true);

                 newPosition = hit.collider.gameObject.transform.position;
                 DT = hit.collider.gameObject.GetComponent<DragingTiles>();
             }
         }
         else
         {
             hitPlayfield = false;
             hitCard = false;

         }

Where and how can i disable that HighlightField GameObject?

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

1 Reply

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

Answer by Glurth · Nov 05, 2015 at 03:00 PM

I would think you just need to add one more condition to your if statements, for when the tag is NOT "snapField" or "card". You probably also want to SetActive(false), on the highlightfield:

  if(Physics.Raycast(ray, out hit, 15))
  {
         if(hit.collider.tag == "SnapField")
                      {
                          ....
                      }
                      else if(hit.collider.tag == "card")
                      {
                            ...
                      }
                      else
                      {
                         hitPlayfield = false;
                         hitCard = false;
                         //HighLightField = hit.collider.transform.FindChild("HighLightField").gameObject;
                         if(HighLightField!=null)
                              HighLightField.SetActive(false);
                     }
 }
 else
 {
                         hitPlayfield = false;
                         hitCard = false;
                         //HighLightField = hit.collider.transform.FindChild("HighLightField").gameObject;
                         if(HighLightField!=null)
                              HighLightField.SetActive(false);
 
 }

Edit: remarked out an incorrect line in last else segment, would cause null reference exception. Also, added null check. I now ASSUME that HighLightField, is a class member, initialized to NULL.

Comment
Add comment · Show 8 · 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 OctoMan · Nov 05, 2015 at 03:06 PM 0
Share

That might be possible if there would be another collider to check against, but there isn't one. This way i get alot NullReferences.

I'll try to add an other collider without a tag. Edit: Doesn't work

avatar image Glurth OctoMan · Nov 05, 2015 at 03:22 PM 0
Share

That might be possible if there would be another collider to check against, but there isn't one.

I don't understand, if it doesn't hit another collider, it will fail the if(Physics.Raycast(ray, out hit, 15)) check, right?
Ah, I see what happened, when it fails to hit a collider, how does it know which object to disable?! The hit-result is NULL! I suggest you store that information (a reference to the HighlightField object) as a member variable of your class. Then, when your collider hits nothing, you disable that STORED highlight field, (rather than using the hit result as I initially did in the example above, to deter$$anonymous$$e which object to deactivate).
avatar image OctoMan Glurth · Nov 05, 2015 at 03:42 PM 0
Share

Okay lets see:

I have

 private GameObject HighLightField;

declared already and fill in the hitted gameobject and set it's childobject to active.

What should i do next? Store the Highlight object in another object like and do this?

 StoredHighLightField = HighLightField;
 StoredHighLightField.SetActive(true);

The outcome is kinda same since i keep overwriting The StoredObject anyways when i hit another card or field.

Can you explain it a bit more precise and help me on the way?

Show more comments

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

33 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 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

Check if position is inside a collider 5 Answers

how do I call a function from another script, when Raycast Hits? 1 Answer

Issues With SetActive 0 Answers

Raycast hit 2 Answers

Set Object as active if Raycast hits nothing 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