Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

135
Visualizações
IEnumerators no continúa desde la declaración de rendimiento

Así que tengo un problema con IEnumerators con la llamada de retorno de rendimiento al final de la función de opciones. Luego, la función de conversación se configura para que produzca un retorno verdadero cuando el archivo de texto llega a una línea que debería finalizar la opción. Pero la función de opciones no continúa desde la llamada de conversación de devolución de rendimiento al final y simplemente se detiene aunque la función de conversación devuelve verdadero.

Ediciones:

Entonces, el problema es que la función de opciones no responde a la función de conversación que se establece en verdadero en la declaración de rendimiento al final de la función.

He usado puntos de interrupción para asegurarme de que las opciones no se llamen varias veces y que la función parlante alcance el retorno de rendimiento verdadero. Solo la función de opciones nunca continúa desde la declaración de rendimiento.

He incluido las dos funciones a continuación. Puedo agregar todo el script c# y el archivo de texto si es necesario.

 IEnumerator Talking(string[] text_file, int line) { while (line != text_file.Length) { if (text_file[line].Split(' ')[0] == "Keyword") { var key = text_file[line].Split(' ')[1]; switch (key) { case "Option": yield return Option(text_file, line); break; case "End": End(); yield break; case "Code": line++; Code(text_file[line]); break; default: print("Keyword " + key + " not reconsised"); break; } } else if (text_file[line] == "End_Option") { line++; yield return true; } output_Text.DisplayText(text_file[line]); while (!controller.click) { yield return null; } line++; } } IEnumerator Option(string[] text_file, int line) { yield return new WaitForEndOfFrame(); var options = 2; int option_start = line; int option_1 = 0; int option_2 = 0; line++; var split = text_file[line].Split('|'); output_Text.Display_Options(split[0], split[1]); while (!controller.click) { yield return null; } line++; while (options != 0) { while (text_file[line] != "End_Option") { option_1++; line++; } line++; options--; while (text_file[line] != "End_Option") { option_2++; line++; } line++; options--; } while (output_Text.choice == 0) { yield return null; } if (output_Text.choice == 1) { output_Text.choice = 0; line = option_start + 1; } if (output_Text.choice == 2) { output_Text.choice = 0; line = option_start + 2 + option_1; } yield return Talking(text_file, line); line = option_start + 3 + option_1 + option_2; yield return true; } }
over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Un enumerador no hace mucho hasta que es enumerado. Para que su yield return Option(...) funcione, el consumidor tendría que verificar el enumerador y: enumerarlo. Supongo que eso no está sucediendo. Quizás podría hacer eso en su enumerador externo, es decir,

 foreach (var val in Option(text_file, line)) { yield return val; }

(O lo mismo usando while (inner.MoveNext()) e inner.Current si insiste en IEnumerator en lugar de IEnumerable )

Como nota al margen: por lo general, debe preferir enumeradores tipificados genéricos, es decir, IEnumerator<T> para algunos T específicos.

over 4 years ago · Santiago Trujillo Relatório

0

Su problema es generar una llamada a una función coroutine como lo está haciendo aquí

 yield return Talking(text_file, line);

Es más o menos solo llamar a la rutina como una función regular. El comportamiento que creo que está buscando es ejecutar Talking como una rutina desde su rutina actual.

Para hacer eso tendrías que hacer:

 yield return StartCoroutine(Talking(text_file, line));

Lo cual ejecutará la función como su propia rutina y esperará a que termine antes de continuar.

(Esto es completamente específico de la forma en que Unity maneja las corrutinas de Unity y, por supuesto, no es cierto en general para c# IEnumerators)

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda