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?
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.
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
I don't understand, if it doesn't hit another collider, it will fail the if(Physics.Raycast(ray, out hit, 15)) check, right?That might be possible if there would be another collider to check against, but there isn't one.
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).
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?
Your answer
Follow this Question
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