首页 > 解决方案 > 如何从局部变量中保持位置?

问题描述

因此,我收到此错误“当前上下文中不存在变量?” line(30, 12),这无关紧要,我只想知道如何保持我的“for”拥有的位置并放入变量中。我需要这个,因为我正在尝试执行“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");
  }
 }
}

标签: c#unity3d

解决方案


numeroSprite is declared as local variable inside of IEnumerator Count(). It doesn't exist outside of that method. If you want to be able to access it in another method make it a private variable:

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){

  // ...

or use the numeroSpriteInt you already declared but never used just the same way.

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){

  // ...

As Programmer already sayd in your cases you rather want to do

idImage = XY;

Instead of your whole switch thing to me it looks way more reasonable to just use something like

if(numeroSprite >=0 && numeroSprite <=10)
{
    idImage = numeroSprite + 1;
}

推荐阅读