- Home /
Removing null object from array in unity
So, im trying to make a simple game, but it will involve multiple "player" objects. When one is destroyed, the whole script stops. So im trying to make it so when any of them become missing/null, they are removed from the array.
Currently, im trying to call this:
public void FixPlayerDeath()
{
foreach (var player in players)
{
if (player == null)
{
List<GameObject> gameObjectList = new List<GameObject>(players);
gameObjectList.RemoveAll(x => x == null);
players = gameObjectList.ToArray();
}
}
}
in the update section. the array is called "players". Here is the full script so far.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MultiplayerFollowerScript : MonoBehaviour
{
public int speed = 5;
public float radius = 5.0f;
public float damage;
public int cooldownlength;
public float cooldown;
public Rigidbody myrb;
public float jumpSpeed = 12.0f;
public GameObject[] players;
public GameObject attackableplayer;
public float distancegetter;
public float bestdist;
void Start()
{
}
private void OnCollisionEnter(Collision other)
{
if (other.gameObject.CompareTag("DeathLayer"))
{
myrb.AddForce(Vector3.up * jumpSpeed, ForceMode.Impulse);
}
}
public void FixPlayerDeath()
{
foreach (var player in players)
{
if (player == null)
{
List<GameObject> gameObjectList = new List<GameObject>(players);
gameObjectList.RemoveAll(x => x == null);
players = gameObjectList.ToArray();
}
}
}
public void GetClosestPlayer()
{
foreach (var obj in players)
{
distancegetter = (Vector3.Distance(obj.transform.position, transform.position));
bestdist = (Vector3.Distance(attackableplayer.transform.position, transform.position));
if (distancegetter < bestdist)
{
attackableplayer = obj;
}
}
}
public void ApproachClosestPlayer()
{
if (Vector3.Distance(transform.position, attackableplayer.transform.position) <= radius)
{
transform.LookAt(attackableplayer.transform);
transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
}
void CoolDownManager()
{
if (cooldown > 0)
{
cooldown = cooldown - Time.deltaTime;
}
}
void Update()
{
GetClosestPlayer();
ApproachClosestPlayer();
CoolDownManager();
FixPlayerDeath();
NewBest();
}
public void NewBest()
{
attackableplayer = players[1];
}
void log(string message)
{
//if (LogsEnabled == true) {
Debug.Log(message);
//}
}
}
Comment