Home > Software engineering >  Unity C# error: (12,47): error CS1503: Argument 2: cannot convert from 'System.Collections.Gene
Unity C# error: (12,47): error CS1503: Argument 2: cannot convert from 'System.Collections.Gene

Time:05-13

I'm new to programming in general.

With another Script i store in the list "spawnPointC" all gameobjects called spawnPointC that appear from spawning other prefabs.

I want to pick a random GameObject from that list, and store it's position to spawn another object at the same position later.

I've tried some other things, but i don't know what i'm doing.

How would you do it?

1  using System.Collections;
2  using System.Collections.Generic;
3  using UnityEngine;
4
5  public class CspList : MonoBehaviour
6  {
7    public List<GameObject> spawnPointsC;
8    [SerializeField] private GameObject goal;
9 
10   void Start()
11   {
12       GameObject spawnIndex = Random.Range(0, spawnPointsC);
13 
14      float pointX = spawnIndex.transform.position.x;
15      float pointY = spawnIndex.transform.position.y;
16      float pointZ = spawnIndex.transform.position.z;
17
18      Vector3 pointSpawn = new Vector3(pointX, pointY, pointZ);
19      Instantiate(goal, pointSpawn, Quaternion.identity);
20   }
21 }

CodePudding user response:

Ok so as said you simply wanted to pass in

spawnPointsC.Count

since you want the amount of items, not the entire list instance.

Further for an index it makes no sense to have the type GameObject. You want an int or simply var since the compiler already "knows" what is returned by Random.Range anyway, there is no need to explicitly tell it that it is an int

var spawnIndex = Random.Range(0, spawnPointsC.Count);

And as a side note a Vector3 is a struct. You can shorten your code to simply

void Start()
{
    var spawnIndex = Random.Range(0, spawnPointsC.Count);
    var randomSpawnPoint = spawnPointsC[spawnIndex].transform.position;
      
    Instantiate(goal, randomSpawnPoint, Quaternion.identity);
}

this is also way more efficient than repeatedly accessing the array and/or properties of the object

CodePudding user response:

The errors tells you that you trying to list of GameObjects as float and its happening here:

GameObject spawnIndex = Random.Range(0, spawnPointsC.Count);

I'm not exactly sure why you would try to do, but maybe try to use spawnPointsC.Count as @derHugo mention.

Try this:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CspList : MonoBehaviour
{
   public List<GameObject> spawnPointsC;
   [SerializeField] private GameObject goal;

   void Start()
   {
      int spawnIndex = Random.Range(0, spawnPointsC.Count);
     
      float pointX = spawnPointsC[spawnIndex].transform.position.x;
      float pointY = spawnPointsC[spawnIndex].transform.position.y;
      float pointZ = spawnPointsC[spawnIndex].transform.position.z;
     
      Vector3 pointSpawn = new Vector3(pointX, pointY, pointZ);
      Instantiate(goal, pointSpawn, Quaternion.identity);
  }
}
  • Related