Erro com lista
2 participantes
Página 1 de 1
Erro com lista
O erro que esta dando é esse (InvalidOperationException: Collection was modified; enumeration operation may not execute.
System.Collections.Generic.List`1+Enumerator[UnityEngine.GameObject].VerifyState () (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Collections.Generic/List.cs:778)
System.Collections.Generic.List`1+Enumerator[UnityEngine.GameObject].MoveNext () (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Collections.Generic/List.cs:784)
Controle.Update () (at Assets/Controle.cs:64)) irei deixar o script
System.Collections.Generic.List`1+Enumerator[UnityEngine.GameObject].VerifyState () (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Collections.Generic/List.cs:778)
System.Collections.Generic.List`1+Enumerator[UnityEngine.GameObject].MoveNext () (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Collections.Generic/List.cs:784)
Controle.Update () (at Assets/Controle.cs:64)) irei deixar o script
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class Controle : MonoBehaviour {
public List<GameObject> selecionados;
public GameObject target;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
RaycastHit hit;
if (Input.GetMouseButton (0)) {
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
if(Physics.Raycast(ray,out hit,1000)){
if(hit.collider.gameObject.tag == "Unit"){
target = hit.collider.gameObject;
if (selecionados.Count == 0) {
selecionados.Add (target);
} else {
foreach (GameObject teste in selecionados) {
if (teste.gameObject.name != target.gameObject.name) {
selecionados.Add (target.gameObject);
}
}
}
}
}
}
if (Input.GetMouseButton (1)) {
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
if(Physics.Raycast(ray,out hit,1000)){
target = hit.collider.gameObject;
if (Input.GetKeyDown (KeyCode.L)) {
selecionados.Remove (target.gameObject);
}
foreach (GameObject teste in selecionados) {
teste.gameObject.GetComponent<NavMeshAgent> ().SetDestination (hit.point);
}
}
}
if ( Input.GetKey (KeyCode.L) &&Input.GetMouseButton (1)) {
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
if(Physics.Raycast(ray,out hit,1000)){
GameObject target2 = hit.collider.gameObject;
foreach (GameObject teste in selecionados) {
if(target2.gameObject == teste.gameObject){
selecionados.Remove (target2.gameObject);
}
}
}
}
}
}
luizmauro123- Avançado
- PONTOS : 3077
REPUTAÇÃO : 6
Idade : 27
Áreas de atuação : Quase um programador C# e começando a aprender Unity3D
Respeito as regras :
Re: Erro com lista
Você sabe em qual momento está dando o erro? por que o script em si aparenta estar OK
Re: Erro com lista
Então ele da erro quando eu seleciono um soldado e dps eu seleciono outro ele pausa o jogo e se eu despausar ele volta ao normal e a msm coisa se eu fizer com um terceiro soldado e por ai vai e isso acontece ate qnd eu tento desselecionar algum
luizmauro123- Avançado
- PONTOS : 3077
REPUTAÇÃO : 6
Idade : 27
Áreas de atuação : Quase um programador C# e começando a aprender Unity3D
Respeito as regras :
Re: Erro com lista
https://mega.nz/#!eZAFEKyL!FYaMtV6YFGCq3EeavZXbONkeEWDPXZ-gc_5pKDzHMS4 Ok to deixando o link para vc baixar aki vlws
luizmauro123- Avançado
- PONTOS : 3077
REPUTAÇÃO : 6
Idade : 27
Áreas de atuação : Quase um programador C# e começando a aprender Unity3D
Respeito as regras :
Re: Erro com lista
Ok, as modificações que eu fiz:
1 - Troquei o GetMouseButton por GetMouseButtonDown, para entrar no if só se pressionar uma vez, e não enquanto está pressionando.
2 - adicionei List.contains em um if, para pedir se os objetos já estavam na lista, pois eu não preciso adicionar os objetos na lista se eles já estão lá, ne?
3 - troquei os foreach por u For com list.count para ir até o final dela
Tem mais umas coisinhas para melhorar, mas no geral, agora funciona
1 - Troquei o GetMouseButton por GetMouseButtonDown, para entrar no if só se pressionar uma vez, e não enquanto está pressionando.
2 - adicionei List.contains em um if, para pedir se os objetos já estavam na lista, pois eu não preciso adicionar os objetos na lista se eles já estão lá, ne?
3 - troquei os foreach por u For com list.count para ir até o final dela
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class Controle : MonoBehaviour {
public List<GameObject> selecionados;
public GameObject target;
void Update () {
RaycastHit hit;
if (Input.GetMouseButtonDown (0)) {
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
if(Physics.Raycast(ray,out hit,1000)){
if(hit.collider.gameObject.tag == "Unit"){
target = hit.collider.gameObject;
if (selecionados.Count == 0) {
selecionados.Add (target);
} else {
for (int x = 0; x < selecionados.Count; x++) {
if (selecionados [x].gameObject.name != target.gameObject.name && !selecionados.Contains(target.gameObject)) {
selecionados.Add (target.gameObject);
}
}
}
}
}
}
if (Input.GetMouseButtonDown (1)) {
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
if(Physics.Raycast(ray,out hit,1000)){
target = hit.collider.gameObject;
if (Input.GetKeyDown (KeyCode.L)) {
selecionados.Remove (target.gameObject);
}
for (int x = 0; x < selecionados.Count; x++) {
selecionados[x].gameObject.GetComponent<NavMeshAgent> ().SetDestination (hit.point);
}
}
}
if (Input.GetKey (KeyCode.L) && Input.GetMouseButtonDown (1)){
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
if(Physics.Raycast(ray,out hit,1000)){
GameObject target2 = hit.collider.gameObject;
for (int x = 0; x < selecionados.Count; x++) {
if(target2.gameObject == selecionados[x].gameObject){
selecionados.Remove (target2.gameObject);
}
}
}
}
}
}
Tem mais umas coisinhas para melhorar, mas no geral, agora funciona
Tópicos semelhantes
» [duvida]erro ao deletar item da lista
» erro erro e mais erro script de craft
» Bom dia, erro invisível como resolver? Erro -> [15:32:11]
» Erro ao abrir projeto ( Fatal Erro )
» ERRO NO SCRIPT UM UNICO ERRO
» erro erro e mais erro script de craft
» Bom dia, erro invisível como resolver? Erro -> [15:32:11]
» Erro ao abrir projeto ( Fatal Erro )
» ERRO NO SCRIPT UM UNICO ERRO
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos