- Home /
Make an array of all visible objects
Hey Unitarians!
What I'm trying to do is on every frame, make an array of all the visible enemies in the scene. The way I'm trying to do this is by this code:
// Use this for initialization
void Start () {
Enemies = GameObject.FindGameObjectsWithTag("Enemy");
}
// Update is called once per frame
void Update () {
if(!player) { //There isn't a player to check distance with, so don't worry about it
player = GameObject.FindWithTag("Player");
} else {
//There is a player - continue
for(int i = 0 ; i < Enemies.Length ; i++) //See what enemies are visible
{
if(Enemies[i].GetComponent<MeshRenderer>().renderer.isVisible == true) {
VisibleEnemies[i] = Enemies[i];
}
}
if(VisibleEnemies.Length == 0) { //If there are no visible enemies
this.transform.position = new Vector3(0.5f, 0.5f, 0.0f);
} else { //There are visible enemy(s)
}
}
}
And what it should do is this:
In the start method, find all the enemies in the screen and store in an array
On every update, it should go through every enemy in the Enemies array and check to see if they are visible from the camera's perspective
If they are, they are added to another array called VisibleEnemies
Then the code checks to see if there are any enemies in the VisibleEnemies array. If there aren't any, then the script holder gameobject reverts to a default state.
There are no errors int he code but when I run it I get this cryptic error:
(wrapper stelemref) object:stelemref (object,intptr,object) Crosshair.Update () (at Assets/My Thingies/Scripts/Miscellaneous/Crosshair.cs:27) For reference, line 27 says: VisibleEnemies[i] = Enemies[i]; I have no idea how to procede so any help would be greatly appreciated!IndexOutOfRangeException: Array index is out of range.
Answer by aman_jha · Aug 07, 2014 at 09:20 PM
Nevermind solved it xD
Here's my code for anyone who needs help later on:
void Start () {
Enemies = GameObject.FindGameObjectsWithTag("Enemy");
}
// Update is called once per frame
void Update () {
if(!player) { //There isn't a player to check distance with, so don't worry about it
player = GameObject.FindWithTag("Player");
} else {
//There is a player - continue
for(int i = 0 ; i < Enemies.Length ; i++) //See what enemies are visible
{
if(Enemies[i].GetComponent<MeshRenderer>().renderer.isVisible == true) {
//VisibleEnemies[i] = Enemies[i];
System.Collections.Generic.List<GameObject> list = new System.Collections.Generic.List<GameObject>(Enemies);
list.Remove(Enemies[i]);
VisibleEnemies = list.ToArray();
}
}
if(VisibleEnemies.Length == 0) { //If there are no visible enemies
this.transform.position = new Vector3(0.5f, 0.5f, 0.0f);
} else { //There are visible enemy(s)
closestEnemy = FindClosestEnemy();
transform.position = Camera.main.WorldToViewportPoint(closestEnemy.transform.position);
}
}
}
Your answer
Follow this Question
Related Questions
How to detect an object which be in FOV of certain camera ? 1 Answer
Array of Arrays of GameObjects/Prefabs (C#) 1 Answer
C# SetActive GameObject Array 2 Answers
GameObjects static array NullReferenceException 1 Answer
Why are my 2D sprite GameObjects blinking and how do I fix this problem? 0 Answers