void OutlineChest()
{
foreach (GameObject chests in chest)
{
if (Vector2.Distance(indicator.transform.position, chests.transform.position) == 0)
{
chests.transform.GetChild(0).GetComponent().enabled = true;
indicator.GetComponent().enabled = false;
}
else if (Vector2.Distance(indicator.transform.position, chests.transform.position) != 0)
{
chests.transform.GetChild(0).GetComponent().enabled = false;
indicator.GetComponent().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!
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.