Как сохранить позицию из локальной переменной? - PullRequest
0 голосов
/ 31 октября 2018

Итак, я получаю эту ошибку "Переменная не существует в текущем контексте?" строка (30, 12), которая не имеет большого значения, я просто хочу знать, как я могу сохранить позицию, которую занимает мое «для», и вставить переменную. Мне это нужно, потому что я пытаюсь это сделать и проверю «Id», как вы можете видеть в коде (просто посмотрите на часть idImagem). Есть способ сделать это? Кстати, вот мой код

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class RandomizarCartas : MonoBehaviour {

public Sprite[] _meusOutrosSprites;
private Image[] _images;
private int idImagem;
private int numeroSpriteInt;

public void Start()
{         
 _images = gameObject.GetComponentsInChildren<Image>();
 StartCoroutine(Count());      
}

IEnumerator Count()
{                      
     for(int i = 0; i < _images.Length; i++)
     {
           var numeroSprite = Random.Range(0, _meusOutrosSprites.Length - 1);
          _images[i].sprite = _meusOutrosSprites[numeroSprite];
     }

     yield return new WaitForSeconds(0);
}
public void PegarID(){
  switch (numeroSprite){
      case 0:
        idImagem=1;
        break;
      case 1:
        idImagem=2;
        break;
      case 2:
        idImagem=3;
        break;
      case 3:
        idImagem=4;
        break;
      case 4:
        idImagem=5;
        break;
      default:
      break;

  }
public void LetraA(){
  if(idImagem==1){
      SceneManager.LoadScene("Sucesso");
  }else{
      SceneManager.LoadScene("Fases");
  }
}

public void LetraB(){
  if(idImagem==2){
      SceneManager.LoadScene("Sucesso");
  }else{
      SceneManager.LoadScene("Fases");
  }
}

public void LetraC(){
  if(idImagem==3){
      SceneManager.LoadScene("Sucesso");
  }else{
      SceneManager.LoadScene("Fases");
  }
}

public void LetraD(){
  if(idImagem==4){
      SceneManager.LoadScene("Sucesso");
  }else{
      SceneManager.LoadScene("Fases");
  }
}

public void LetraE(){
  if(idImagem==5){
      SceneManager.LoadScene("Sucesso");
  }else{
      SceneManager.LoadScene("Fases");
  }
}

public void LetraF(){
  if(idImagem==6){
      SceneManager.LoadScene("Sucesso");
  }else{
      SceneManager.LoadScene("Fases");
  }
 }
}

1 Ответ

0 голосов
/ 31 октября 2018

numeroSprite объявлено как локальная переменная внутри IEnumerator Count(). Это не существует вне этого метода. Если вы хотите иметь доступ к нему другим способом, сделайте его приватной переменной:

private int numeroSprite;

private IEnumerator Count()
{                      
     for(int i = 0; i < _images.Length; i++)
     {
           var numeroSprite = Random.Range(0, _meusOutrosSprites.Length - 1);
          _images[i].sprite = _meusOutrosSprites[numeroSprite];
     }

     yield return new WaitForSeconds(0);
}

public void PegarID(){
  switch (numeroSprite){

  // ...

или используйте numeroSpriteInt, который вы уже объявили, но никогда не использовали таким же образом.

private int numeroSpriteInt;

private IEnumerator Count()
{
    for (int i = 0; i < _images.Length; i++)
    {
        numeroSpriteInt = Random.Range(0, _meusOutrosSprites.Length - 1);
        _images[i].sprite = _meusOutrosSprites[numeroSprite];
    }

    yield return new WaitForSeconds(0);
}

public void PegarID(){
  switch (numeroSpriteInt){

  // ...

Как уже сказал Программист в своих case s, вы скорее хотите сделать

idImage = XY;

Вместо всего вашего переключателя мне кажется более разумным использовать что-то вроде

if(numeroSprite >=0 && numeroSprite <=10)
{
    idImage = numeroSprite + 1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...