- Home /
All objects in an array not working properly
void OutlineChest()
{
foreach (GameObject chests in chest)
{
if (Vector2.Distance(indicator.transform.position, chests.transform.position) == 0)
{
chests.transform.GetChild(0).GetComponent<Renderer>().enabled = true;
indicator.GetComponent<Renderer>().enabled = false;
}
else if (Vector2.Distance(indicator.transform.position, chests.transform.position) != 0)
{
chests.transform.GetChild(0).GetComponent<Renderer>().enabled = false;
indicator.GetComponent<Renderer>().enabled = true;
}
}
}
The code shown above is sort of working but the indicator renderer is not being set back to false when close to the second chest object. It outlines the second chest still, but the indicator renderer needs to turn off when the outline turns on. GetChild(0) is the outliner for the chest objects which is working fine... Any help would be appreciated!
Answer by Jwizard93 · Jul 11, 2017 at 09:02 PM
You are testing for both chests in each frame. With that knowledge can you see how the else statement for the first chest will turn the indicator renderer on when you are near the second chest and thus, presumably, not near the first chest?
You should restructure. This logic needs be run for only the chest you are near. Not both. Think about it? What are you going to do once you have many chests (if that is going to happen.) This is not sustainable.
private GameObject nearChest;
GameObject FindNearbyChest()
{
foreach (GameObject chests in chest)
{
if (Vector2.Distance(indicator.transform.position, chests.transform.position) == 0)
{
return chests;
}
return null;
}
}
void OutlineChest(GameObject chest)
{
if (chest != null)
{
chest.transform.GetChild(0).GetComponent<Renderer>().enabled = true;
}
else
{
indicator.GetComponent<Renderer>().enabled = true;
}
}
void Update()
{
nearChest = findNearbyChest();
outlineChest(nearbyChest);
}
This still isn't pretty. But it should work.
I made some typos in here so don't try to copy paste it, rather understand it. Reply if you don't understand.
Your answer
Follow this Question
Related Questions
Returning one dimension of a two-dimensional array 1 Answer
Issues creating proper level-unlocking script 0 Answers
Is it not possible to include "if-then" conditionals within foreach loops? 1 Answer
How do I compare the position of my player to each elements position of an array of GameObjects? 0 Answers
Function executes only on 1 object 1 Answer