- Home /
ArgumentException: GetComponent requires that the requested component 'List`1' derives from MonoBehaviour or Component or is an interface.
Hi, I have been working on this script:
public enum PlaneType { SmallBomber, MediumBomber, LargeBomber } public PlaneType planetype; public List Plane = new List (); public List Spawns = new List (); public List Remove = new List ();
public bool T;
public void PlaneAttack(PlaneType type)
{
if (type == PlaneType.SmallBomber)
{
for (int i = 0; i < 2; i++)
{
Instantiate(Plane[1]);
Instantiate(Plane[2]);
Thread.Sleep(1000);
}
}
else if (type == PlaneType.MediumBomber)
{
for (int i = 0; i < 2; i++)
{
Instantiate(Plane[0]);
Thread.Sleep(3000);
}
}
else
{
Instantiate(Plane[0]);
}
}
Plane = GetComponent<List<GameObject>>();
for (int i = 0; i < 5; i++)
{
Spawns.Add(GameObject.Find("Spawn " + i.ToString()));
}
for (int j = 0; j < 5; j++)
{
Remove.Add(GameObject.Find("Destroy " + j.ToString()));
}
for (int a = 0; a < 3; a++)
{
Plane.Add(GameObject.Find("EnemyPlane Small"));
}
Plane[0].GetComponent<Airplane>().StartPoint = Spawns[3].transform;
Plane[0].GetComponent<Airplane>().EndPoint = Remove[3].transform;
Plane[1].GetComponent<Airplane>().StartPoint = Spawns[2].transform;
Plane[1].GetComponent<Airplane>().EndPoint = Remove[2].transform;
Plane[2].GetComponent<Airplane>().StartPoint = Spawns[4].transform;
Plane[2].GetComponent<Airplane>().EndPoint = Remove[4].transform;
}
// Update is called once per frame
void Update () {
if (T == true)
{
PlaneAttack(planetype);
T = false;
}
}
}
I have 3 copies of the same prefab, in the Plane list, but with different transform set (using empty GameObjects that act as Markers). When debugging, this error is thrown:
ArgumentException: GetComponent requires that the requested component 'List`1' derives from MonoBehaviour or Component or is an interface. UnityEngine.Component.GetComponent[List`1] () (at C:/buildslave/unity/build/artifacts/generated/common/runtime/ComponentBindings.gen.cs:48) PlaneAttack.Start () (at Assets/Scripts/PlaneAttack.cs:131)
I entered the first line into Unity answers but to no avail as none of the previous answers suited my script.
Thanks
NOTE: this is a simplified version of my final script, and the lines listed in the error will not match those in the code shown.
Answer by Hellium · Jun 13, 2017 at 04:17 PM
Plane = GetComponent<List<GameObject>>();
Does not mean anything
You may want to get the child transforms instead :
List<Transform> Plane = new List<Transform>() ;
// ....
for( int childIndex = 0 ; childIndex < transform.childCount ; ++childIndex )
Plane.Add( transform.GetChild( childIndex ) ) ;
Your answer
Follow this Question
Related Questions
Latest update spawned weird errors in my console. 1 Answer
Inheritance Confusion 1 Answer
Restore list elements at termination 0 Answers
Error when transferring items from one list to another 1 Answer